GO(或Golang)使使用Goroutines,Channels和Select语句立即进行许多事情变得容易。让我们逐步将其分解。
1。 goroutines:
在Go中,Goroutine就像计算机可以处理的迷你任务。就像有多个可以一起工作的帮助者。启动goroutine很简单:
go functionName()
只需在您要同时执行的函数之前将单词“ go”放在。想象一下,这就像告诉您的计算机:“嘿,在我做其他事情的时候执行此任务!”
例如:
func sayHello() {
fmt.Println("Hello from a helper!")
}
func main() {
go sayHello()
fmt.Println("Hello from the main task!")
}
在此代码中,助手说“你好”,而主要任务也说“你好”。有时,助手可能会先完成,有时主要任务可能会先完成。就像一场小比赛!
2。频道:
频道就像特殊的管子,可以帮助助手(goroutines)互相交谈。他们可以发送和接收消息。就像朋友之间的笔记一样。
这是您制作频道的方式:
ch := make(chan int)
这会创建一个可以携带数字的通道。您可以从中发送并获取数据:
go func() {
ch <- 42 // Sending 42 through the channel
}()
value := <-ch // Getting a value from the channel
fmt.Println(value)
3。选择语句:
SELECT语句就像一个助手,一次观看多个通道。就像有人在看多个电话打电话一样。当任何电话打来电话时,他们都会接听。
例如:
select {
case msg1 := <-ch1:
fmt.Println("Got", msg1)
case msg2 := <-ch2:
fmt.Println("Got", msg2)
case ch3 <- 3:
fmt.Println("Sent 3 to ch3")
default:
fmt.Println("No messages")
}
此选择的助手倾听到不同的通道。如果任何频道上的消息都会出现,它会做点什么。如果许多频道都有消息,它会选择一个渠道来回答。这就像一个多任务助手!
快速提示:
-
否共享内存:Goroutines与频道交谈,因此我们不必担心直接共享信息。这就像通过笔记谈论而不是与玩具战斗。
-
缓冲通道:通道可以在阅读之前保存消息。就像一个可以存储字母的邮箱。
-
范围和关闭:当没有更多消息到来时,可以关闭频道。您也可以使用范围读取所有消息,例如收集所有糖果。
-
同步软件包:有一个称为同步软件包的特殊工具。当事情变得更加复杂时,它会有所帮助,例如许多帮助者需要一起工作。
结论:
一次做很多事情的方式聪明又容易。这就像有帮助者,通过渠道交谈并使用选择来管理它们。这比旧的一起做很多事情要简单得多。
感谢您的阅读。我鼓励您在Twitter上关注我,我经常分享有关JavaScript和反应的内容,并为开源项目和学习Golang做出贡献。我目前正在寻找远程工作或实习。
Twitter:https://twitter.com/Diwakar_766