的设定方法的
sync.WaitGroup是空的方法集:
wg := sync.WaitGroup{}fmt.Println(reflect.TypeOf(wg).NumMethod())输出(在Go Playground上尝试):
0
这是因为所有方法都
sync.WaitGroup具有指针接收器,因此它们都是该
*sync.WaitGroup类型的方法集的一部分。
当您这样做时:
var wg sync.WaitGroupwg.Add(1)wg.Done()// etc.
这实际上是的简写
(&wg).Add(1),
(&wg).Done()等等。
这是在规范中:致电:
如果
x是可寻址且&x方法集包含m,x.m()则为的简写(&x).m()。
因此,当您拥有一个可寻址的值(变量是可寻址的)时,您可以调用在非指针值上具有指针接收器的任何方法,并且编译器将自动获取该地址并将其用作接收器值。



