gpt4 book ai didi

go - 为什么在此 golang 代码段中指向 WaitGroup 的指针地址不同?

转载 作者:IT王子 更新时间:2023-10-29 02:17:23 25 4
gpt4 key购买 nike

playground 上的代码片段

我正在打印 sync.WaitGroup 的指针地址,它们都是不同的。为什么?

func Run() *sync.WaitGroup {
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fmt.Printf("goroutine %p\n", &wg)

time.Sleep(5 * time.Second)
fmt.Println("wokeup")
}()

fmt.Printf("returning %p\n", &wg)
return &wg
}

func main() {
runtime.GOMAXPROCS(3)
wg := Run()

fmt.Printf(" main %p\n", &wg)
wg.Wait()
}

典型输出显示函数 Runmain 中的地址不同。我希望那是一样的,n'est-ce pas?

returning 0xc0840045c0
main 0xc084000038
goroutine 0xc0840045c0
wokeup

最佳答案

例如,

package main

import "fmt"
import "sync"
import "time"
import "runtime"

func Run() *sync.WaitGroup {
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fmt.Printf("goroutine %p\n", &wg)
fmt.Println("sleep for 5s")
time.Sleep(5 * time.Second)
fmt.Println("wokeup")
}()
fmt.Printf("returning %p\n", &wg)
return &wg
}

func main() {
runtime.GOMAXPROCS(3)
wg := Run()
fmt.Printf(" main %p\n", wg)
wg.Wait()
}

输出:

returning 0x1052e2c0
main 0x1052e2c0
goroutine 0x1052e2c0
sleep for 5s

改变

fmt.Printf("     main %p\n", &wg)

fmt.Printf("     main %p\n", wg)

main中,变量wg包含了你想要的地址。您正在打印包含地址的变量的地址。

关于go - 为什么在此 golang 代码段中指向 WaitGroup 的指针地址不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22928581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com