如果调用的函数来自不同的包,如何同步 GoRoutine



为了学习如何在Go中构建Web应用程序,我创建了使用Gorilla mux的小Web应用程序,我主要有以下包main,处理程序,模型,结构。

我想在浏览文档时使用goroutines,我知道我需要使用同步包和go fun((。我尝试在同一个包中使用如下所示,并且工作正常。但是,如果被调用的函数来自不同的包,如何同步goroutine?

// same package : working
package models
import (
    "fmt"
    "sync"
)
var wg sync.WaitGroup
func Func1() (string, error) {
    lexpiry := ReadDatafrom()
    wg.Add(1)
    go validExp(string(lexpiry))
    ----
    ----
    wg.Wait()
    ----
    return "S/F", err
}
func validExp(lexpiry string) {
    fmt.Println("CHeck Expiry Date")
    wg.Done()
}

但是如果我需要调用不同包的函数,我当然可以在包之前添加 go 关键字,例如:go otherPackage.Function()

但是我将如何同步它呢?我的意思是我们用go调用的函数必须有wg。完成((?

// Diffrent package : ? ( need guidance how to achive this )
package handlers
import (
    "fmt"
    "sync"
    "go_mjolnir/models"
    "net/http"
)
var wg sync.WaitGroup
func Func1(w http.ResponseWriter, r *http.Request) {
    lexpiry := ReadDatafrom()
    wg.Add(1)
    go models.ValidExp(string(lexpiry))
    ----
        calling func of model package
    ----
    wg.Wait()
    ----
    // return json response
}
package model
---
---
func validExp(lexpiry string) {
    fmt.Println("CHeck Expiry Date")
    // wg.Done()
    // how to call wg.Done() of handllers packge , is it right way ?
}

有人可以指导我吗?如果被调用的函数来自不同的包,如何同步goroutine?

使用闭包:

package main
import "sync"
func main() {
    wg := &sync.WaitGroup{}
    wg.Add(1)
    go func() {
            f() // doesn't matter in which package f is defined.
            wg.Done()
    }()
    wg.Wait()
}
func f() {
}

最新更新