Go的并发魔法:Goroutines和Channels的秘密武器
创始人
2025-07-02 11:10:46
0

大家好!我是lincyang,一个拥有10年Java开发经验的架构师、项目经理,热衷于技术分享。

最近团队在使用go语言进行新项目的研发,用到了go的并发。在此跟大家聊聊他的并发使用小知识。废话不多说,让我们开始吧!

在当今的技术世界中,高效的并发处理是非常关键的。Go语言提供了一套独特而强大的并发处理机制。下面我们将深入探讨Go的Goroutines和Channels。

1. Goroutines:轻量级的线程

1.1 什么是Goroutine?  

Goroutine是一个轻量级的线程,它是Go语言并发设计的核心。

1.2 示例:

package main

import (
   "fmt"
   "time"
)

func sayHello() {
   for i := 0; i < 5; i++ {
       time.Sleep(100 * time.Millisecond)
       fmt.Println("Hello")
  }
}

func main() {
   go sayHello()
   for i := 0; i < 5; i++ {
       time.Sleep(150 * time.Millisecond)
       fmt.Println("World")
  }
}

在上述代码中,我们创建了一个Goroutine来执行sayHello函数,主线程则执行打印"World"的操作。输出将是"Hello"和"World"交替出现。

2. Channels:通信的桥梁

2.1 什么是Channel?  

Channel是一个用于Goroutines间通信的管道。

2.2 示例:

package main

import "fmt"

func sendData(ch chan string) {
   ch <- "Hello from Goroutine!"
}

func main() {
   messageChannel := make(chan string)
   go sendData(messageChannel)
   message := <-messageChannel
   fmt.Println(message)
}

在此示例中,我们创建了一个字符串类型的Channel,Goroutine通过这个Channel发送了一个消息,主线程接收到这个消息并打印。

3. 结合使用Goroutines和Channels

3.1 示例:

package main

import (
   "fmt"
   "time"
)

func producer(ch chan int) {
   for i := 0; i < 10; i++ {
       ch <- i
       fmt.Println("Sent:", i)
       time.Sleep(time.Millisecond * 50)
  }
   close(ch)
}

func consumer(ch chan int) {
   for num := range ch {
       fmt.Println("Received:", num)
  }
}

func main() {
   ch := make(chan int)
   go producer(ch)
   consumer(ch)
}

在此示例中,我们有一个生产者函数和一个消费者函数。生产者通过Channel发送数据,消费者从Channel中接收数据。

总结:  Go语言中的Goroutines和Channels为我们提供了强大而简洁的并发处理工具。它们不仅易于理解,还非常高效。

欢迎来到我的微信技术公众号!我是lincyang,一个拥有10年Java开发经验的架构师、项目经理,热衷于技术分享。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...