求大佬解答一下 Go 相关的问题
LZ 是 Java 转 go,目前对 go 的指针不是很理解,很多时候不明白为什么要用指针,比如下面的语句
var feeds []*Feed err = json.NewDecoder(file).Decode(&feeds) return feeds, err
这里没看明白为什么要用*Feed, 直接 Feed 为什么不行呢?
LZ 是 Java 转 go,目前对 go 的指针不是很理解,很多时候不明白为什么要用指针,比如下面的语句
var feeds []*Feed err = json.NewDecoder(file).Decode(&feeds) return feeds, err
这里没看明白为什么要用*Feed, 直接 Feed 为什么不行呢?
至于为啥要加* 有 c 或 c++语言经验的就知道这是指针运算符, go 语言是 c 语言开发的大佬领导团队开发的, 为的是解决并发问题
https://stackoverflow.com/questions/27622083/slices-of-structs-vs-slices-of-pointers-to-structs
你试试传递:(注意 星星的位置)
var feeds *[]Feed = new([]Feed)
那你就不用传递引用了
用指针主要是一般认为,传指针比传值的性能损耗小,而且传值还涉及到指拷贝的问题
但是在 go 里面这个问题也不是绝对的,因为你传指针的话还会遇到逃逸问题,有时候传指针性能还不如直接值拷贝好
所以对于 go 经验性来说,对于小的 struct 选择值拷贝性能较好,对于大的 struct 传指针性能会好
但是对于什么事小 struct,什么事大 struct,就没什么统一标准了。。。。