[系列] Go 您所在的位置:网站首页 江西省地图地形图 [系列] Go

[系列] Go

2023-04-15 10:15| 来源: 网络整理| 查看: 265

目录概述声明 chan写入 chan读取 chan关闭 chan示例推荐阅读

概述

原来分享基础语法的时候,还未分享过 chan 通道,这次把它补上。

chan 可以理解为队列,遵循先进先出的规则。

在说 chan 之前,咱们先说一下 go 关键字。

在 go 关键字后面加一个函数,就可以创建一个线程,函数可以为已经写好的函数,也可以是匿名函数。

举个例子:

func main() { fmt.Println("main start") go func() { fmt.Println("goroutine") }() fmt.Println("main end") }

输出:

main start main end

为什么没有输出 goroutine ?

首先,我们清楚 Go 语言的线程是并发机制,不是并行机制。

那么,什么是并发,什么是并行?

并发是不同的代码块交替执行,也就是交替可以做不同的事情。

并行是不同的代码块同时执行,也就是同时可以做不同的事情。

举个生活化场景的例子:

你正在家看书,忽然电话来了,然后你接电话,通话完成后继续看书,这就是并发,看书和接电话交替做。

如果电话来了,你一边看书一遍接电话,这就是并行,看书和接电话一起做。

说回上面的例子,为什么没有输出 goroutine ?

main 函数是一个主线程,是因为主线程执行太快了,子线程还没来得及执行,所以看不到输出。

现在让主线程休眠 1 秒钟,再试试。

func main() { fmt.Println("main start") go func() { fmt.Println("goroutine") }() time.Sleep(1 * time.Second) fmt.Println("main end") }

输出:

main start goroutine main end

这就对了。

接下来,看看如何使用 chan 。

声明 chan // 声明不带缓冲的通道 ch1 := make(chan string) // 声明带10个缓冲的通道 ch2 := make(chan string, 10) // 声明只读通道 ch3 := make(


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有