老师,有个问题困扰了很久,向你请教,我在用golang开发后端业务是经常操作数据库,查询多条数据放在函数中创建好的结构体对象,通常是一个结构体的切片,如[]user{},那么我需要返回这个结构体切片,这个时候函数应该返回带指针类型的*[]user{}还是不带指针类型的,哪种方式对性能有很大的影响?貌似编译器都会将他们分配到堆上,请教了?
作者回复: slice其实是一个包含了指向其数据连续存储空间指针的结构体,所以,即便你返回的不是指向slice的指针,结构体实例被复制了,其中里面的指向数据存储空间的指针也就被复制到新的结构体实例中,也会指向同一块数据存储空间。
因此,由于大量数据没有被复制,复制仅发生在slice的结构上开销不大,两种方式对性能影响差别不大。