写点什么

Golang 的通道基础(一)

作者:liuzhen007
  • 2021 年 12 月 28 日
  • 本文字数:1167 字

    阅读完需:约 4 分钟

目录

  • 前言

  • 正文

  • 结尾

前言

今天我们来聊一聊 Golang 中的通道,我们可以使用通道来传输数据,也可以传递消息,多个协程之间就是通过通道来通讯的。

正文

在 Golang 中如何表示通道呢?通道的关键字是 chan,但它是有类型,可以是整型、字符型、布尔型等。每个通道都有属于自己的类型,该类型表示通道中允许传递的数据类型,这一点是严格规定。通道作为一种数据类型,也有自己的默认值,零值为 nil, 通道必须使用 make() 方法来定义创建。

接下来,我们通过一段代码来理解一下吧。

实例代码:

package main
import ( "fmt")
func main() { //通道的声明 var channel chan int if channel == nil { fmt.Println("我是通道 channel") fmt.Println("我刚被声明,还没有定义,因此是 nil") } //如果通道时nil 则要通过make创建通道 channel= make(chan int) if channel != nil { fmt.Println("我是通道 channel") fmt.Println("我刚被make定义了,已经不是 nil 了") } }
复制代码

代码执行结果:

我是通道 channel

我刚被声明,还没有定义,因此是 nil

我是通道 channel

我刚被 make 定义了,已经不是 nil 了

通过上面的代码,我们可以知道通道变量是通过关键字 chan 来声明的,同时需要指明通道内传输的数据的类型。另外,通道声明后是空值,需要使用 make() 方法来定义创建。

下面,我们来看看通道变量的类型和值。

完善上面的代码,修改如下:

package main
import ( "fmt")
func main() { //通道的声明 var channel chan int if channel == nil { fmt.Println("我是通道 channel") fmt.Println("我刚被声明,还没有定义,因此是 nil") } //如果通道时nil 则要通过make创建通道 channel= make(chan int) if channel != nil { fmt.Println("我是通道 channel") fmt.Println("我刚被make定义了,已经不是 nil 了") fmt.Printf("我的通道数据类型:%T,通道的值:%v,\n", channel, channel) } }
复制代码

代码执行结果:

我是通道 channel

我刚被声明,还没有定义,因此是 nil

我是通道 channel

我刚被 make 定义了,已经不是 nil 了

我的通道数据类型:chan int,通道的值:0xc000064060,

我们发现,通道的数据类型是 chan int,而不是 int。

另外,通道的值是一个地址,一个内存地址 0xc000064060 ,所以说通道一个引用类型的变量。

结尾

通道在 Golang 的实际使用场景中非常常见,所以我们需要认知学习,因为内容比较多,我分三部分分别介绍,本篇是基础篇。后边还会有入门篇和上手篇,敬请期待。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄

发布于: 刚刚
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
Golang的通道基础(一)