湛蓝之海 发表于 2021-12-24 22:59:23

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

目录



[*]前言
[*]正文
[*]结尾



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


作者简介:
页: [1]
查看完整版本: #yyds干货盘点# Golang的通道基础(一)