1 正文
- struct{}在golang中不占用内存(怎么实现的得再研究下), 可以通过print sizeof(struct{})来确认. 这个特性可以用在利用map实现set功能上. 以往常用的是定义一个map[string]bool, bool类型虽然也很小, 但是占用了1字节不发送数据的channel
- fmt实现时用到了反射, 因此拼接字符串, 数字转字符串等操作尽量用”+”, strconv来代替
- golang通过编译器来决定一个变量的内存分配在栈上还是分配在堆上. 值传递虽然要拷贝, 但是如果是小对象的话是分配在栈上(<64KB), 而指针传递必须分配在堆上. 因此指针传递不一定就比值传递快. 通常只有对于需要修改原对象或者对象很大的情况下用指针传递. 而对于频繁创建删除或者对象很小的情况下用值传递
- 利用sync.Pool(内存池)存放频繁创建删除的对象
2 参考文档
https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html#overview