点点网站开发技术分享

记录个人日常开发笔记与技巧

将一个值类型作为一个参数传递给函数或者作为一个方法的接收者,似乎是对内存的滥用,因为值类型一直是传递拷贝。但是另一方面,值类型的内存是在栈上分配,内存分配快速且开销不大。如果你传递一个指针,而不是一个值类型,Go 编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,我们没有任何收获。

阅读全文 »

查看如下程序:nexter 是一个接口类型,并且定义了一个 next() 方法读取下一字节。函数 nextFew1nexter 接口作为参数并读取接下来的 num 个字节,并返回一个切片:这是正确做法。但是 nextFew2 使用一个指向 nexter 接口类型的指针作为参数传递给函数:当使用 next() 函数时,系统会给出一个编译错误:**n.next undefined (type *nexter has no field or method next)** (译者注:n.next 未定义(*nexter 类型没有 next 成员或 next 方法))

阅读全文 »

由于教学需要和对协程的工作原理有一个直观的了解,在第 14 章 使用了一些简单的算法,举例说明了协程和通道的使用,例如生产者或者迭代器。在实际应用中,你不需要并发执行,或者你不需要关注协程和通道的开销,在大多数情况下,通过栈传递参数会更有效率。

阅读全文 »
0%