酷!學園

技術討論區 => 程式討論版 => 主題作者是: Yamaka 於 2015-08-02 13:50

主題: [Golang] 如何在 goroutine 傳回值
作者: Yamaka2015-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

^_____^