第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 goroutine 返回值會發(fā)生什么

從 goroutine 返回值會發(fā)生什么

Go
catspeake 2021-09-10 17:47:37
有人可以提供從 goroutine 返回的澄清值。goroutine 的返回值是否存儲在權(quán)益上。例子 :// function getNumber returns the "int i" and we can't use this returned value// because this function is invoked as goroutine.// We know that, to communicate between main and goroutine one could// use the channel ( chan <- i), but I am interested to know about// the use of return i in goroutine. Is it possible to get/ use this // returned value.func getNumber(i int) int {    return i       }func main() {    for i:=0; i<10; i++ {        go printNumber(i)        }    time.Sleep(5)    }我們應(yīng)該盡量避免 goroutine 中的返回值嗎?
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

快速查看匯編輸出顯示


$ go build -gcflags -S z.go

該getNumber()函數(shù)確實將其結(jié)果存儲到堆棧中


"".getNumber t=1 size=16 value=0 args=0x10 locals=0x0

    0x0000 00000 (z.go:5)   TEXT    "".getNumber+0(SB),4,$0-16

    0x0000 00000 (z.go:6)   MOVQ    "".i+8(FP),BX

    0x0005 00005 (z.go:6)   MOVQ    BX,"".~r1+16(FP)

    0x000a 00010 (z.go:6)   RET ,

所以當(dāng)它被 goroutine 調(diào)用時,它確實將其結(jié)果存儲到堆棧中。然而,這是一個新的堆棧,它在 goroutine 結(jié)束時被銷毀,因此無法檢索返回值。


"".main t=1 size=96 value=0 args=0x0 locals=0x18

    0x0000 00000 (z.go:9)   TEXT    "".main+0(SB),$24-0

    0x0000 00000 (z.go:9)   MOVQ    (TLS),CX

    0x0009 00009 (z.go:9)   CMPQ    SP,16(CX)

    0x000d 00013 (z.go:9)   JHI ,22

    0x000f 00015 (z.go:9)   CALL    ,runtime.morestack_noctxt(SB)

    0x0014 00020 (z.go:9)   JMP ,0

    0x0016 00022 (z.go:9)   SUBQ    $24,SP

    0x001a 00026 (z.go:10)  MOVQ    $0,AX

    0x001c 00028 (z.go:10)  CMPQ    AX,$10

    0x0020 00032 (z.go:10)  JGE $0,74

    0x0022 00034 (z.go:11)  MOVQ    AX,"".i+16(SP)

    0x0027 00039 (z.go:11)  MOVQ    AX,(SP)

    0x002b 00043 (z.go:11)  MOVQ    $"".getNumber·f+0(SB),CX

    0x0032 00050 (z.go:11)  PUSHQ   CX,

    0x0033 00051 (z.go:11)  PUSHQ   $16,

    0x0035 00053 (z.go:11)  PCDATA  $0,$0

    0x0035 00053 (z.go:11)  CALL    ,runtime.newproc(SB)

    0x003a 00058 (z.go:11)  POPQ    ,CX

    0x003b 00059 (z.go:11)  POPQ    ,CX

    0x003c 00060 (z.go:10)  MOVQ    "".i+16(SP),AX

    0x0041 00065 (z.go:10)  INCQ    ,AX

    0x0044 00068 (z.go:10)  NOP ,

    0x0044 00068 (z.go:10)  CMPQ    AX,$10

    0x0048 00072 (z.go:10)  JLT $0,34

    0x004a 00074 (z.go:13)  MOVQ    $5,(SP)

    0x0052 00082 (z.go:13)  PCDATA  $0,$0

    0x0052 00082 (z.go:13)  CALL    ,time.Sleep(SB)

    0x0057 00087 (z.go:14)  ADDQ    $24,SP

    0x005b 00091 (z.go:14)  RET ,

然而,沒有辦法檢索這些結(jié)果。


查看完整回答
反對 回復(fù) 2021-09-10
?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

引用Go 語言規(guī)范:Go 語句

如果函數(shù)有任何返回值,它們會在函數(shù)完成時被丟棄。

因此允許將返回值作為 goroutine 執(zhí)行函數(shù) - 它沒有任何問題,并且規(guī)范明確指出它們的返回值被簡單地丟棄,它不會導(dǎo)致任何錯誤,但您不會以通常的方式得到它(就像您直接調(diào)用該函數(shù)一樣)。


查看完整回答
反對 回復(fù) 2021-09-10
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

值被丟棄。并沒有什么特別的go聲明。你也可以寫


...

_ = getNumber(i)

...

要不就


...

getNumber(i)

...

甚至


查看完整回答
反對 回復(fù) 2021-09-10
  • 3 回答
  • 0 關(guān)注
  • 332 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號