Go 協程是與其他函數或方法一起併發運行的函數或方法。Go 協程可以看作是輕量級線程。與線程相比,創建一個 Go 協程的成本很小。因此在 Go 應用中,常常會看到有數以千計的 Go 協程併發地運行。
信道可以想像成 Go 協程之間通信的管道。如同管道中的水會從一端流到另一端,通過使用信道,數據也可以從一端發送,在另一端接收。
通過信道來實現 Go 協程間的通信。
代碼實現如下:
package main
import (
"fmt"
)
func uploadfile(args string,done chan string){
fmt.Println(args)
//信道返回數據
done <- "success"
}
func queryStatus(work_id int ,done chan string) {
fmt.Println(work_id)
//信道返回數據
done <- "待審覈"
}
func main() {
a := "開始上傳文件"
//信道
done := make(chan string)
//上傳文件協程
go uploadfile(a,done)
//接受信道返回的數據
data := <- done
fmt.Println(data)
//查詢狀態協程
query_status := make(chan string)
work_id := 1
go queryStatus(work_id,query_status)
status := <- query_status
fmt.Println(status)
// 總提交
fmt.Println("數據提交完畢")
}
go的協程類似於多線程,至於官方說成本小這點優勢,這個還需要去查看底層原理。