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的协程类似于多线程,至于官方说成本小这点优势,这个还需要去查看底层原理。