1. 函数A把切片作为参数传入函数B
由于切片的底层是结构体,这种传参表面是切片引用,本质却是结构体的值传递,因此如果B内部对切片进行重新赋值或扩容,会导致B中切片的底层数组指针变化,而A中的切片还是原来的底层数组。
2. map的value存放结构体
map的value可以直接存放结构体,但是不能用map[key].field = 1这种方式更新字段值。
因为 go中的 map 的 value 本身是不可寻址的, map 的扩容的时候,可能要做键值对迁移。
解决办法:value存放结构体指针;或者重新赋值整个结构体。
3. goroutine导致的内存泄露
协程永远阻塞在chan的读写上无法退出。
可以通过context.Done配合cancel解决
4. 全局变量使用不恰当导致内存浪费
本该被回收的对象无意间被全局变量引用,内存空间得不到释放。
标签:map,value,切片,go,一些,底层,结构 From: https://www.cnblogs.com/gcr277/p/16818295.html