golang 的goroutine(协程)和channel(管道)的使用

本文介绍了一个使用Go语言实现的简单并发模型案例。通过创建多个goroutine来模拟不同动物的输出行为,并利用channel进行数据传递与同步。具体展示了如何定义goroutine、使用channel以及如何在主goroutine中等待其他goroutine完成。

package main

import(

    "fmt"

    // "time"

    // "strconv"

    //"runtime"

)

func writeDog(dogChan chan string){

    dog := "dog"

    for i:=1;i<=3;i++{

        dogChan<- dog

    }

    close(dogChan)

}

func writeCat(catChan chan string){

    cat := "cat"

    for i:=1;i<=3;i++{

        catChan<- cat

    }

    close(catChan)

}

func writeFish(fishChan chan string){

    fish := "fish"

    for i:=1;i<=3;i++{

        fishChan<- fish

    }

    close(fishChan)

}





 

func main(){

    //三个管道

    dogChan := make(chan string ,3)

    catChan := make(chan string ,3)

    fishChan := make(chan string ,3)

    //三个执行方法

    go writeDog(dogChan)

    go writeCat(catChan)

    go writeFish(fishChan)

    //打印值

    for{

        dog, ok := <-dogChan

        if !ok{

            break

        }

        fmt.Println("打印=》",dog)

    }

    //打印值

    for{

        cat, ok := <-catChan

        if !ok{

            break

        }

        fmt.Println("打印=》",cat)

    }

    //打印值

    for{

        fish, ok := <-fishChan

        if !ok{

            break

        }

        fmt.Println("打印=》",fish)

    }

    fmt.Println("主线程完毕")

}

最终按照要求输出结果 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值