这两者之间到底有什么区别?
wg1 := new(sync.WaitGroup)
和
var wg2 sync.WaitGroup
为什么
foo(someString string, someChn chan string, wg *sync.WaitGroup)
适用于wg1,但不适用于wg2和
bar(someString string, someChn chan string, wg sync.WaitGroup)
适用于wg2,但不适用于wg1?
答案 0 :(得分:2)
new
语法初始化pointer,因此wg1
的类型为*sync.WaitGroup
,而不是sync.WaitGroup
。这与任何其他带指针的语言相同,尽管某些现代语言并不直接具有此概念。简而言之,它是存储对象的内存地址。
在Go中使用的一个示例是将某对象传递给函数并对其进行更改,因为Go是按值传递。传递wg2
并对其进行操作不会更改原始的WaitGroup
。