评论

收藏

[Unix] #yyds干货盘点# Golang的通道基础(一)

服务系统 服务系统 发布于:2021-12-24 22:59 | 阅读数:392 | 评论:0

目录



  • 前言
  • 正文
  • 结尾



前言
今天我们来聊一聊 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 的实际使用场景中非常常见,所以我们需要认知学习,因为内容比较多,我分三部分分别介绍,本篇是基础篇。后边还会有入门篇和上手篇,敬请期待。


作者简介:
关注下面的标签,发现更多相似文章