找回密码
 立即注册
首页 业界区 业界 Golang基础笔记十之goroutine和channel

Golang基础笔记十之goroutine和channel

啖曼烟 2025-7-16 11:21:40
本文首发于公众号:Hunter后端
原文链接:Golang基础笔记十之goroutine和channel
这一篇介绍 Golang 里的 goroutine 和 channel 通道。
以下是本篇笔记目录:

  • goroutine
  • channel
  • goroutine 与 channel 的使用
1、goroutine

goroutine 是一种轻量级线程(用户态线程),由 Go 运行时管理而非操作系统,它是 Go 并发模型的核心,能高效处理大量并发任务。
1. goroutine 的使用

goroutine 的使用非常简单,直接使用 go + 函数 即可启动一个 goroutine:
  1. package main
  2. import (
  3.         "fmt"
  4.         "time"
  5. )
  6. func PrintGoroutineInfo() {
  7.     fmt.Println("msg from goroutine")
  8. }
  9. func main() {
  10.     go PrintGoroutineInfo()
  11.     time.Sleep(1 * time.Millisecond)
  12.     fmt.Println("msg from main")
  13. }
复制代码
2. 匿名函数使用 goroutine
  1. func main() {
  2.     go func() {
  3.         fmt.Println("msg from goroutine")
  4.     }()
  5.     time.Sleep(1 * time.Second)
  6. }
复制代码
而如果 goroutine 运行的函数有返回值,想要获取函数的返回值应该如何操作呢?
或者当我们使用 goroutine 的时候,如何使主 goroutine 等待并发的 goroutine 执行完毕再接着往后执行呢?
其中一个方法就是使用 channel 来获取返回值,以及使用 channel 的阻塞状态来等待并发的 goroutine 执行完毕。
2、channel

channel,即通道,可用于在 goroutine 之间传递数据和同步状态。
1. channel 的声明与创建

channel 是强类型的,每个 channel 只能传递一种类型的数据。
1) 无缓冲通道

比如我们声明一个传递 int 类型的 channel:
  1. var ch chan int
复制代码
或者直接创建一个传递 int 数据的通道:
  1. ch := make(chan int)
复制代码
2) 有缓冲通道

在创建 channel 的时候,如果不指定容量,那么则称其为无缓冲通道,如果指定了容量,则为有缓冲通道,比如下面创建一个容量为 3 的通道:
  1. ch := make(chan int, 3)
复制代码
2. channel 的操作

发送数据
向一个 channel 发送数据的操作如下:
[code]ch

相关推荐

您需要登录后才可以回帖 登录 | 立即注册