我一直在玩 spotify api 并遇到了一個問題。context.Context被使用,因此函式只是“隨機”執行。OAuth 函式應該檢查代碼是否無效,但如果我不使用通道執行此操作,則代碼的最后一部分會直接執行,甚至第一個/第二個函式都沒有完成。因此,我創建了第二個 goroutine 來檢查是否接收到通道,然后寫一個回應。但是現在我收到此錯誤http: wrote more than the declared Content-Length,如何更正 Content-Lenght?為什么還要使用背景關系?
我的代碼:
// Wrapper: github.com/zmb3/spotify/v2
func WriteResponse(w http.ResponseWriter, h chan *spotify.Client) {
client := <-h
user, err := client.CurrentUser(context.Background())
fmt.Println(user.User.DisplayName)
if err != nil {
_, err := fmt.Fprint(w, "Couldn't get user sorry :(")
if err != nil {
return
}
}
_, err = fmt.Fprintf(w, "Logged in as %s!", user.User.DisplayName)
if err != nil {
log.Println(err)
return
}
}
func OAuth(w http.ResponseWriter, r *http.Request) {
ch := make(chan *spotify.Client)
tok, err := auth.Token(r.Context(), state, r)
if err != nil {
w.WriteHeader(503)
_, err := fmt.Fprint(w, "Couldn't get token sorry :(")
if err != nil {
return
}
}
if st := r.FormValue("state"); st != state {
http.NotFound(w,r)
log.Fatalf("State mismatch: %s != %s\n", st, state)
}
go WriteResponse(w, ch)
client := spotify.New(auth.Client(r.Context(), tok))
ch <- client
}
uj5u.com熱心網友回復:
你忘記回來了。。
if err != nil {
w.WriteHeader(503)
_, err := fmt.Fprint(w, "Couldn't get token sorry :(")
if err != nil {
return
}
// here
return
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419543.html
標籤:
