go語(yǔ)言之go(goroutine)控制異步詳解
go(goroutine)控制異步
Go 語(yǔ)言是一種并發(fā)編程語(yǔ)言,在 Go 里有一個(gè)非常重要的關(guān)鍵字 go(goroutine),一般我們可以用它做一些異步,并發(fā)的任務(wù)。
goroutine 用來(lái)調(diào)用函數(shù),當(dāng)某個(gè)函數(shù)被 go 關(guān)鍵字調(diào)用后,go 就會(huì)創(chuàng)建一個(gè)類(lèi)似協(xié)程的東西,來(lái)執(zhí)行這個(gè)函數(shù),這樣可以輕易的實(shí)現(xiàn)并發(fā)。
示例
package main
import (
"fmt"
)
func main() {
go work1()
go work2()
fmt.Println("[全部完成]")
}
func work1(){
fmt.Println("work1")
}
func work2(){
fmt.Println("work2")
}
結(jié)果
[全部完成]
當(dāng)然這是一個(gè)不恰當(dāng)?shù)氖纠?,但這也證明了異步執(zhí)行,在調(diào)用work1,work2之后不等輸出結(jié)果,就繼續(xù)執(zhí)行了。
要想等異步執(zhí)行完之后,再執(zhí)行最后的輸出,需要加入WaitGroup
正確示例
package main
import (
"fmt"
"sync"
)
var waitGroup sync.WaitGroup
func main() {
waitGroup.Add(2)
go work1()
go work2()
waitGroup.Wait()
fmt.Println("[全部完成]")
}
func work1(){
fmt.Println("work1")
waitGroup.Done()
}
func work2(){
fmt.Println("work2")
waitGroup.Done()
}
結(jié)果:
work2 work1 [全部完成]
WaitGroup詳解,見(jiàn):http://m.fzitv.net/jiaoben/34632015w.htm
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go語(yǔ)言net包RPC遠(yuǎn)程調(diào)用三種方式http與json-rpc及tcp
這篇文章主要為大家介紹了Go語(yǔ)言net包RPC遠(yuǎn)程調(diào)用三種方式分別使用http與json-rpc及tcp的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
golang中sync.Mutex的實(shí)現(xiàn)方法
本文主要介紹了golang中sync.Mutex的實(shí)現(xiàn)方法,mutex?主要有兩個(gè)?method:?Lock()?和?Unlock(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Go處理JSON數(shù)組字符串的常用第三方庫(kù)代碼示例
在Go語(yǔ)言中,處理JSON數(shù)組是一項(xiàng)常見(jiàn)的任務(wù),JSON(JavaScript Object Notation)是一種常用的數(shù)據(jù)交換格式,而數(shù)組是其中一種重要的數(shù)據(jù)結(jié)構(gòu),本文將介紹如何使用Go語(yǔ)言處理JSON數(shù)組字符串,并提供相應(yīng)的源代碼和描述,需要的朋友可以參考下2025-09-09
golang中接口對(duì)象的轉(zhuǎn)型兩種方式
這篇文章主要介紹了golang中接口對(duì)象的轉(zhuǎn)型方式,大家都知道接口對(duì)象的轉(zhuǎn)型有兩種方式,文中通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
Go中標(biāo)準(zhǔn)庫(kù)fmt包的使用小結(jié)
fmt包是Go語(yǔ)言處理輸入輸出的核心庫(kù),提供Print/Scan系列函數(shù)及多樣格式化動(dòng)詞(如%v、%d、%s等),支持字符串格式化、掃描、自定義輸出格式及錯(cuò)誤處理,廣泛用于數(shù)據(jù)格式化與輸出控制,下面就來(lái)詳細(xì)的介紹一下2025-09-09
golang網(wǎng)絡(luò)socket粘包問(wèn)題的解決方法
這篇文章主要介紹了golang網(wǎng)絡(luò)socket粘包問(wèn)題的解決方法,簡(jiǎn)單講述了socket粘包的定義并結(jié)合實(shí)例形式分析了Go語(yǔ)言解決粘包問(wèn)題的方法,需要的朋友可以參考下2016-07-07
Golang服務(wù)的請(qǐng)求調(diào)度的實(shí)現(xiàn)
Golang服務(wù)請(qǐng)求調(diào)度是一種使用Go語(yǔ)言實(shí)現(xiàn)的服務(wù)請(qǐng)求管理方法,本文主要介紹了Golang服務(wù)的請(qǐng)求調(diào)度的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

