这两种声明方式之间的区别,一种是新声明,另一种是没有声明?

时间:2020-03-31 07:39:05

标签: go

这两者之间到底有什么区别?

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?

1 个答案:

答案 0 :(得分:2)

new语法初始化pointer,因此wg1的类型为*sync.WaitGroup,而不是sync.WaitGroup。这与任何其他带指针的语言相同,尽管某些现代语言并不直接具有此概念。简而言之,它是存储对象的内存地址。

在Go中使用的一个示例是将某对象传递给函数并对其进行更改,因为Go是按值传递。传递wg2并对其进行操作不会更改原始的WaitGroup