Golang的通道基础(一)|Go主题月

315 阅读2分钟

目录

  • 前言
  • 正文
  • 结尾

前言

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