第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

啟動Go HTTP服務器,做一些事情,然后在任務完成后將其關(guān)閉

啟動Go HTTP服務器,做一些事情,然后在任務完成后將其關(guān)閉

Go
墨色風雨 2022-08-09 20:32:25
我正在從 CLI 應用程序設置 OAuth2 流,我正在處理。我需要為提供商創(chuàng)建一個臨時HTTP服務器以發(fā)送回調(diào),例如localhost:8080/callback一旦提供商發(fā)送了我需要的詳細信息,我希望能夠關(guān)閉HTTP服務器,只是為了保持一切干凈。我想我正在尋找的是例程和等待組,但我對這個領域仍然很陌生。這就是我到目前為止所擁有的。我已經(jīng)編輯了將用戶發(fā)送到提供程序的部分,因為我的主要問題只是如何在捕獲變量后關(guān)閉HTTP服務器。token服務器啟動將用戶定向到提供程序站點上的授權(quán) URL用戶批準請求提供程序?qū)⒂脩舳ㄏ蚧豯ocalhost:8080/callbackURL僅包含客戶端參數(shù),因此我必須使用服務器HTML來捕獲值并將其發(fā)送回服務器服務器接收令牌,然后可以關(guān)閉package mainimport (    "fmt"    "log"    "net/http"    "sync")func main() {    // Start local HTTP serevr to listen for response    serverDone := &sync.WaitGroup{}    serverDone.Add(1)    Start(serverDone)    // ... Process to start OAuth2 flow    // User is directed to provider website    // User approves    // Provider direct user back to localhost/callback        serverDone.Wait()}func Start(wg *sync.WaitGroup) {    srv := &http.Server{Addr: ":8080"}    http.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) {        token := r.URL.Query().Get("token")        if token != "" {            fmt.Println("Found Token:", token)            // Shut down server here        } else {            // Server HTML page to fetch token and return to server at /callback        }    })    go func() {        // let main know we are done cleaning up        defer wg.Done()        // ErrServerClosed on graceful close        if err := srv.ListenAndServe(); err != http.ErrServerClosed {            log.Fatalf("ListenAndServe(): %v", err)        }    }()}
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經(jīng)驗 獲得超6個贊

用:


var ctxShutdown, cancel = context.WithCancel(context.Background())

然后:


cancel() // to say sorry, above.

// graceful-shutdown

err := srv.Shutdown(context.Background())

試試這個:


package main


import (

    "context"

    "fmt"

    "log"

    "net/http"

    "sync"

)


func main() {

    serverDone := &sync.WaitGroup{}

    serverDone.Add(1)

    Start(serverDone)

    serverDone.Wait()

    fmt.Println("Done that.")

}


var ctxShutdown, cancel = context.WithCancel(context.Background())


func Start(wg *sync.WaitGroup) {

    srv := &http.Server{Addr: ":8080"}

    http.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) {

        select {

        case <-ctxShutdown.Done():

            fmt.Println("Sorry: Shuting down ...")

            return

        default:

        }

        token := r.URL.Query().Get("token")

        if token != "" {

            fmt.Println("Found Token:", token)

            fmt.Println("Shuting down ...")

            // Shut down server here

            cancel() // to say sorry, above.

            // graceful-shutdown

            err := srv.Shutdown(context.Background())

            if err != nil {

                log.Println("server.Shutdown:", err)

            }


        } else {

            fmt.Fprintln(w, "Hi") // Server HTML page to fetch token and return to server at /callback

        }

    })


    go func() {

        defer wg.Done()

        if err := srv.ListenAndServe(); err != http.ErrServerClosed {

            log.Fatalf("ListenAndServe(): %v", err)

        }

        fmt.Println("Bye.")

    }()

}


運行并打開 http://127.0.0.1:8080/callback?token=2


輸出:


Found Token: 2

Shuting down ...

Bye.

Done that.


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關(guān)注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號