首頁  >  文章  >  後端開發  >  在 golang 中等待函數完成

在 golang 中等待函數完成

WBOY
WBOY轉載
2024-02-13 08:15:08780瀏覽

在 golang 中等待函数完成

在golang中,等待函數完成是一個常見的程式需求。無論是等待一個goroutine完成,或是等待一個channel中的資料到達,都需要合適的等待方式來處理。在這篇文章中,我們將向您介紹一些在golang中等待函數完成的方法和技巧。無論您是初學者還是有經驗的開發者,本文都將為您提供有用的指導和範例程式碼,幫助您更好地處理等待函數完成的場景。讓我們一起來深入了解吧!

問題內容

我在 golang 中有以下程式碼:

func A(){
  go print("hello")
}

func main() {
  A()
  // here I want to wait for the print to happen
  B()
}

如何確保 b() 僅在列印發生後才執行?

解決方法

使用sync.mutex

var l sync.mutex

func a() {
    go func() {
        print("hello")
        l.unlock()
    }()
}

func b() {
    print("world")
}

func testlock(t *testing.t) {
    l.lock()
    a()
    l.lock()
    // here i want to wait for the print to happen
    b()
    l.unlock()
}

使用sync.waitgroup

#

var wg sync.waitgroup

func a() {
    go func() {
        print("hello")
        wg.done()
    }()
}

func b() {
    print("world")
}

func testlock(t *testing.t) {
    wg.add(1)
    a()
    wg.wait()
    // here i want to wait for the print to happen
    b()
}

使用chan###
func A() chan struct{} {
    c := make(chan struct{})
    go func() {     
        print("hello")
        c <- struct{}{}
    }()
    return c
}

func B() {
    print("world")
}

func TestLock(t *testing.T) {
    c := A()
    // here I want to wait for the print to happen
    <-c
    B()
}

以上是在 golang 中等待函數完成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除