作者 主題: [Golang] 如何在 goroutine 傳回值  (閱讀 741 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
[Golang] 如何在 goroutine 傳回值
« 於: 2015-08-02 13:50 »
在語法上, goroutine 不能有傳回值,或者換個比較正確的說法
在 『go func()』這個述中,不能有等號出現,所以就算函數有傳回值
在函數結束後返回的值會直接被丟棄

代碼: [選擇]
import (
"fmt"
)

func getInt() int {
return 12345
}

func main() {
res := 0
go res = getInt()
fmt.Println(“res:”, res)

}
 

這裡編譯就過不了

引用
$ go run ex032.go
# command-line-arguments
./ex032.go:12: syntax error: unexpected =, expecting ( or . or [

但是有傳回值並不會不給『go』

代碼: [選擇]
func main() {
go getInt()
fmt.Println("Done!")

}

就算函數有傳回值,其實還是可以『go』
只是無法接收傳回值,直接忽略了

引用
$ go run ex032.go
Done!

如果無論如何,一定要得到那個傳回值呢?!
那就改用 channel 來傳吧

代碼: [選擇]
func getInt(c chan int) {
c <- 12345
}

func main() {
c := make(chan int)
go getInt(c)
res := <-c
fmt.Println("res:", res)
}

引用
$ go run ex032.go
res: 12345

^_____^