Разница между этими двумя способами декларирования, один с новым без? - PullRequest
0 голосов
/ 31 марта 2020

В чем именно разница между этими двумя?

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 Ответ

2 голосов
/ 31 марта 2020

Синтаксис new инициализирует указатель , поэтому wg1 имеет тип *sync.WaitGroup, а не sync.WaitGroup. Это то же самое, что и любой другой язык с указателями, хотя некоторые современные языки не имеют этой концепции напрямую. В двух словах, это адрес памяти, где хранится объект.

Один из примеров использования в Go - передать someobject в функцию и изменить его, поскольку Go является передачей по значению. Пропуск wg2 и работа с ним не изменит исходный WaitGroup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...