代码实例
package main
import (
"goapp/src/math"
)
func main() {
//全局变量
math.Pipe1 = make(chan int, 1)
println("start goruotine")
go math.Add(3, 4)
var sum = <-math.Pipe1
println(sum)
println("end goruotine")
//传参
Pipe2 :=make(chan int,1)
go math.Add1(3, 4,Pipe2)
sum1 := <-Pipe2
println(sum1)
}
package math
var Pipe1 chan int
func Add(a int ,b int) {
sum:= a+b;
//time.Sleep(10*time.Second)
Pipe1<-sum
println("add sum is ",sum);
}
func Add1(a int ,b int,c chan int) {
sum:= a+b;
//time.Sleep(10*time.Second)
c<-sum
println("add sum is ",sum);
}
对channel的使用一般包括两种第一种是通过声明全局变量来使用,第二种是通过传参来使用
channel的赋值或者 取值都是<- 方式,channel是阻塞的,恰巧是因为阻塞,所以在goroutin里面我们不用sleep 就可以获取到值
关于channel的补充
suma,avga:=math.SumAndAvg(4,6)
println(suma,avga)
func SumAndAvg(a int, b int) (int, int) {
return a+b,(a+b)/2
}
可以接收多个返回值,如果不需要某个返回值,可以使用下划线来接收并抛弃