我创建了一个API,在处理请求后,它会发送一个响应,并启动一个后台goroutine,记录一些消息.在处理API请求后,我使用了"延迟"来执行goroutine.
以下是代码片段:
sendResponse伪代码:
{
...
res.Header().Add("Content-Type", "application/json")
json.NewEncoder(res).Encode(response)
}
响应 struct :
type Response struct {
StatusCode int16 `json:"statusCode"`
Message string `json:"message"`
}
API正文:
{
...
defer logMsgs()
sendAPIResponse()
return
}
logMsgs伪代码:
func logMsgs(){
time.Sleep(10*time.Seconds)
wg := sync.Waitgroup{}
wg.Add(1)
go func(){
for i = 1 to 10
print(i)
wg.Done()
}()
wg.Wait()
}
预期结果是收到API响应,几秒钟后(这里是10秒),i的值从1打印到10.
但在实际结果中,API响应是在10秒后收到的.
据我所知,延迟函数是在周围(或当前/封闭)函数终止或返回后调用的.
因此,我必须首先接收API响应,然后必须记录'I'的值.但在我的情况下,经过几秒钟(10秒)后,我收到了响应.如果"i"的值相当大,这将是一个主要问题.
如果有人能解释这种异常行为并提供可能的解决方案,这将很有帮助.