golang 入门 现在用到了 client := http.Client{} 查了一下 网上的写法都是 client := &http.Client{} 请问一下 这两者在 Go语言中有什么分别吗? 为什么要特地取一下地址?
http.Client{} 可以认为是深度拷贝,每次都会开辟新内存,&http.Client{}可以认为是浅拷贝,取地址,不会新开辟内存。函数调用的时候http.Client{} 会临时开辟栈内存,&http.Client{} 地址需要堆内存。虽然&http.Client{} 很快,复用的时候避免了频繁开辟内存,消耗性能,但是我们知道gc都是是针对堆内存的,因为栈内存每次调用完系统会自动回收,如果你有大量的地址引用,必定导致gc效率降低,所以说还是得根据你的具体业务来权衡。
#4
更多评论
看了下 Stack Overflow 的一个解答 说是为了保持一个好的习惯 虽然在这么简单的例子中用不上 但如果未来复用的话 传指针效率更高一些? 省了拷贝?
#1