技術討論區 > 程式討論版

[Golang] 如何在 goroutine 傳回值

(1/1)

Yamaka:
在語法上, 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
--- 引用結尾 ---

^_____^

導覽

[0] 文章列表

前往完整版本