代码实例

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
}

可以接收多个返回值,如果不需要某个返回值,可以使用下划线来接收并抛弃

关于返回值的接收补充