gpt4 book ai didi

go - 如果调用的函数来自不同的包,如何同步 goroutine?

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:00 27 4
gpt4 key购买 nike

为了学习如何在 Go 中构建 Web 应用程序,我创建了一个小型 Web 应用程序,我在其中使用了 Gorilla mux,我主要在包 main、handlers、model、structs 下面。

我想在浏览文档时使用 goroutines 我开始知道我需要使用 sync 包和 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.Done()?

// 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() {
}

关于go - 如果调用的函数来自不同的包,如何同步 goroutine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com