首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未返回Json

问未返回Json
EN

Stack Overflow用户
提问于 2017-07-10 11:39:04
回答 2查看 53关注 0票数 0

我正在尝试使用Go例程将Json数据返回给请求。当我使用test1(w,r)而不使用"go“时,我的代码可以正常工作。当我使用test1()作为go例程时,我得不到任何json数据。为什么会发生这种情况?

代码语言:javascript
复制
func main() {

    http.HandleFunc("/test", viewdata)

    http.ListenAndServe(":8080", nil)
}

func viewdata(w http.ResponseWriter, r *http.Request) {

    go test1(w, r)

}

func test1(w http.ResponseWriter, r *http.Request) {

   // example struct
    ll := sample{
        "city",
        12,
    }

    w.Header().Set("Content-Type", "application/json")
    json, _ := json.Marshal(ll)
    w.Write(json)

}
EN

回答 2

Stack Overflow用户

发布于 2017-07-10 11:53:01

根据您的代码流程,我看不到使用goroutine的意义。希望你有什么理由。

让我们开始你的问题吧。目前,您的请求在viewdata处理程序启动的goroutine之前完成。因此,您必须使用sync.WaitGroup等待goroutine test1完成执行。

您的更新代码:

代码语言:javascript
复制
func viewdata(w http.ResponseWriter, r *http.Request) {
    var wg sync.WaitGroup
    wg.Add(1)
    go test1(w, r, &wg)
    wg.Wait()
}

func test1(w http.ResponseWriter, r *http.Request, wg *sync.WaitGroup) {
    defer wg.Done()

    ll := sample{
        "city",
        12,
    }

    w.Header().Set("Content-Type", "application/json")
    json, _ := json.Marshal(ll)
    w.Write(json)
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-10 12:20:08

http处理程序已派生为goroutine。所以你不需要产生你的goroutine。

代码语言:javascript
复制
func viewdata(w http.ResponseWriter, r *http.Request) {
    ll := sample{
        "city",
        12,
    }
    w.Header().Set("Content-Type", "application/json")
    w.NewEncoder(w).Encode(ll)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45003457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档