登录
首页 >  Golang >  Go问答

`sync.WaitGroup` 的方法集是什么?

来源:Golang技术栈

时间:2023-04-29 06:47:35 487浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《`sync.WaitGroup` 的方法集是什么?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到golang等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我在下面有这个简单的程序

package main

import (
    "fmt"
    "sync"
    "time"
)

var wg sync.WaitGroup

func main() {
    wg.Add(1)

    go func() {
        fmt.Println("starting...")
        time.Sleep(1 * time.Second)
        fmt.Println("done....")
        wg.Done()
    } ()

    wg.Wait()

}

请注意,我使用var wg sync.WaitGroup的是值,而不是指针。但是同步包的页面指定Add,DoneWait函数采用*sync.WaitGroup.

为什么/这是如何工作的?

正确答案

方法集sync.WaitGroup空方法集:

wg := sync.WaitGroup{}
fmt.Println(reflect.TypeOf(wg).NumMethod())

输出(在Go Playground上试试):

0

这是因为所有的方法sync.WaitGroup都有指针接收器,所以它们都是该*sync.WaitGroup类型的方法集的一部分。

当你这样做时:

var wg sync.WaitGroup

wg.Add(1)
wg.Done()
// etc.

这实际上是等的(&wg).Add(1)简写(&wg).Done()

这在规范中:调用:

Ifx是可寻址的并且&x' 方法集包含m,x.m()(&x).m().

因此,当您有一个可寻址的值(变量是可寻址的)时,您可以调用任何在非指针值上具有指针接收器的方法,编译器将自动获取该地址并将其用作接收器值。

请参阅相关问题:

[通过对象而不是指向它的指针调用带有指针接收器的方法?](https://stackoverflow.com/questions/38481420/calling- a-method-with-a-pointer-receiver-by-an-object-instead-of-a-pointer-to- it/38481697#38481697)

以上就是《`sync.WaitGroup` 的方法集是什么?》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>