go | channel direction、channel sync、channelbuffer

go 中的管道通信

管道通信直连,管道的特点就是单工,一方只能接受/发送

package main
import (
                                "fmt"
)

func ping(pings chan<- string, msg string){

                                pings <- msg
}

/*
        函数pong中 
                参数pings 是一个接收通道(只能从管道接收数据)
                参数pongs 是一个发送通道(只能发送数据给管道)

                <-  在最前头就是发送,反之就是接收
*/
func pong(pings <-chan string, pongs chan<- string){

                        /*      msg := <- pings
                                pong  <- msg

                        */
                        msg := <-pings // pong函数从只接收通道接收数据  
        pongs <- msg  // 然后向只发送通道发送数据  
}

func  main(){

                                pings := make(chan string, 1)
                                pongs := make(chan string, 1)

                                ping(pings, "hello world ! my name is zhangbuda ...")
                                pong(pings, pongs)

                                fmt.Println(<- pongs)
}
#运行结果
hello world ! my name is zhangbuda ...

go 的管道通信,同步

package main
import (
                                "fmt"
                                "time"
)
func worker(done chan bool){

                                fmt.Println("working ...")
                                time.Sleep(time.Second *2)
                                fmt.Println("work done ...")

                                done <- true
}

/*
        实现管道通信同步
*/
func main(){

                                done := make(chan bool, 1)
                                go worker(done)

                                flag := false 
                                flag = <- done
                                if flag {

                                        fmt.Println("the main func is end ...")
                                }

}
#运行结果
working ...
work done ...
the main func is end ...

管道缓冲

package main
import (
                                "fmt"
)

func main(){

                                message := make(chan string, 5)

                                message <- "hello world..."
                                message <- "my name is zhangbuda!!!"
                                message <- "how are you?"
                                message <- "are you fine?"
                                message <- "yeah, I'm fine!!"

                                for i:=0; i < 5; i++{

                                                                fmt.Println(<-message)
                                }
}
#运行结果
hello world...
my name is zhangbuda!!!
how are you?
are you fine?
yeah, I'm fine!!

相关推荐

最近更新

  1. leetcode705-Design HashSet

    2024-03-31 23:36:02       5 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-03-31 23:36:02       5 阅读
  3. vue3、vue2中nextTick源码解析

    2024-03-31 23:36:02       6 阅读
  4. 高级IO——React服务器简单实现

    2024-03-31 23:36:02       5 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-03-31 23:36:02       4 阅读
  6. go第三方库go.uber.org介绍

    2024-03-31 23:36:02       6 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-03-31 23:36:02       7 阅读

热门阅读

  1. 【WPF应用19】WPF中的Button控件详解

    2024-03-31 23:36:02       6 阅读
  2. C基础知识笔记一

    2024-03-31 23:36:02       3 阅读
  3. Python 基础教程:面向对象

    2024-03-31 23:36:02       4 阅读
  4. 关于 UnityEditorWindow

    2024-03-31 23:36:02       5 阅读
  5. 「PHP系列」PHP变量

    2024-03-31 23:36:02       6 阅读
  6. 计算机世界的“十六进制”为什么如此重要

    2024-03-31 23:36:02       5 阅读
  7. 蓝桥杯2014年第十三届省赛真题-切面条

    2024-03-31 23:36:02       5 阅读
  8. 【1单片机入门记录】DS18B20的应用

    2024-03-31 23:36:02       4 阅读
  9. C++中的类型转换

    2024-03-31 23:36:02       4 阅读