随笔分类 - Go语言编程思想
摘要:go语言——输入流Reader与输出流Writer 1. 输入流Reader Reader即输入流,那么什么又是流? 流(stream)是应用程序和外部资源进行数据交互的纽带; 流又分为输入流和输出流;这里的输入和输出都是相对于应用程序而言的,==把外部资源输入到应用程序称之为输入流,反之为输出流=
阅读全文
摘要:1. channel 1.1 channel的使用 例子:主go程发数据,子go程收数据。 package main import ( "fmt" "time" ) //主go程发数据,子go程收数据 func chanDemo() { c := make(chan int) go func() {
阅读全文
摘要:第六章 Channel 6.1 channel的定义 channel是内置的一种数据类型,用于两个go程中间数据的传输。 channel关键字为chan,channel是引用类型,引用类型的变量需要手动分配内存空间,所以需要用make为其创建内存空间,channel初始化的格式如下: //Type为
阅读全文
摘要:第五章 Goroutine 5.1 进程、线程、协程 进程 进程是程序一次动态执行的过程,是程序运行的基本单位。 每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。 进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、页表、文件句柄等)比较大,但相对比较稳定安全。协程切换和协程切
阅读全文
摘要:1 reflect包 reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。Zero接受一个Typ
阅读全文
摘要:第四章 测试与性能调优 4.1 传统测试vs表格驱动测试 ==传统测试== assertEquals()第一个参数是期望结果,第二个参数是实际结果。 传统测试的缺点: 测试数据和测试逻辑混在一起 出错信息不明确 一旦一个数据出错测试全部结束 ==表格驱动测试== 测试结构体中a+b=c。 表格驱动测
阅读全文
摘要:第三章 错误处理和资源管理 3.1 defer调用 3.1.1 defer调用的特点 确保调用在函数结束时发生 参数在defer语句时计算 defer列表为后进先出,遵循栈规则 示例1: package main import "fmt" //defer中相当于有一个栈,遵循先进后出原则 func
阅读全文
摘要:第二章 函数式编程 2.1 函数式编程 “正统”函数式编程: 不可变性:不能有状态,只有常量和函数 函数只能有一个参数 但正统函数式编程的数学性较强可读性不高,本学习过程中不作上述严格规定 函数式编程的特点: 函数是一等公民(函数的参数、变量、返回值都可以是函数) 高阶函数 闭包 2.1.1 闭包
阅读全文
摘要:第一章 面向接口 1.1 接口的概念 现有infra和testing两个包都有Retriever这个结构体,都有Get函数绑定了Retriever类型。 infra包下的urlretriever.go文件代码: package infra import ( "io/ioutil" "net/http
阅读全文