为了学习如何在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() {
}