&http.Client{} 和 http.Client{} 有什么区别?

a554340466 · · 2239 次点击
http.Client{} 可以认为是深度拷贝,每次都会开辟新内存,&http.Client{}可以认为是浅拷贝,取地址,不会新开辟内存。函数调用的时候http.Client{} 会临时开辟栈内存,&http.Client{} 地址需要堆内存。虽然&http.Client{} 很快,复用的时候避免了频繁开辟内存,消耗性能,但是我们知道gc都是是针对堆内存的,因为栈内存每次调用完系统会自动回收,如果你有大量的地址引用,必定导致gc效率降低,所以说还是得根据你的具体业务来权衡。
#4
更多评论
看了下 Stack Overflow 的一个解答 说是为了保持一个好的习惯 虽然在这么简单的例子中用不上 但如果未来复用的话 传指针效率更高一些? 省了拷贝?
#1
第一个是取地址,仅此而已
#2