Go入门指南系列-XVI-IX-闭包和协程的使用
请看下面代码:
请看下面代码:
将一个值类型作为一个参数传递给函数或者作为一个方法的接收者,似乎是对内存的滥用,因为值类型一直是传递拷贝。但是另一方面,值类型的内存是在栈上分配,内存分配快速且开销不大。如果你传递一个指针,而不是一个值类型,Go 编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,我们没有任何收获。
查看如下程序:nexter
是一个接口类型,并且定义了一个 next()
方法读取下一字节。函数 nextFew1
将 nexter
接口作为参数并读取接下来的 num
个字节,并返回一个切片:这是正确做法。但是 nextFew2
使用一个指向 nexter
接口类型的指针作为参数传递给函数:当使用 next()
函数时,系统会给出一个编译错误:**n.next undefined (type *nexter has no field or method next)
** (译者注:n.next 未定义(*nexter 类型没有 next 成员或 next 方法))