GO (channel简单使用篇)

//1. 定义一组channel

ch := make(chan bool)   //chan接收类型为bool  后还有一个参数为缓存参数本篇不讲解缓存(这一行不在代码范围内)

//定义函数使用
func main(){
     ch := make(chan bool)
     go Task(ch)
     <- ch      
     close(ch)  //关闭指令
}

func Task(){
    fmt.Println("Go Task")
    ch<-true             //ch接到 true指令,把数据 GoTask 存入ch管道
}

上述完成一个简单的 GO  channel 的使用

 

go routine  

package main

import (
    "fmt"
)

var c chan string   //定义全局channel使用

func Ping() {
    var i int
    for {
        fmt.Println(<-c)  // 函数执行到此,fmt.Println 打印内容,此时 channel  c 无内容,等待并不向下进行 相当于 if c ~= nil ...
     //函数 main 写入内容至  channel c 后,继续向下执行
        c<-fmt.Sprintf("SET CODE FROM Ping FUNC %d",i) //写入内容至 channel c
        i++ //累加
    }
}

func main() {
    c = make(chan string)

    go Ping()     //执行go routine 函数内容

    for i := 0; i < 10; i++ {
        c<-fmt.Sprintf("SET CODE FROM MAIN FUNC %d",i)   //写入内容至channel c
        fmt.Println(<-c )  //上述Ping函数写入数据后,取出数据
        i++
    }
}

 

posted @ 2017-01-20 15:02  阿波罗一号  阅读(548)  评论(0编辑  收藏  举报