Go では、サーバーがリッスンを開始した後にブラウザを起動するにはどうすればよいですか?
できれば最も簡単な方法が望ましいです。
これまでの私のコードは、要点を絞って非常に単純化されています。
package main
import (
// Standard library packages
"fmt"
"net/http"
"github.com/skratchdot/open-golang/open"
// Third party packages
"github.com/julienschmidt/httprouter"
)
// go get github.com/toqueteos/webbrowser
func main() {
// Instantiate a new router
r := httprouter.New()
// Add a handler on /test
r.GET("/test", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
// Simply write some test data for now
fmt.Fprint(w, "Welcome!\n")
})
//open.Run("https://google.com/")
// open.Start("https://google.com")
// http://127.0.0.1:3000/test
// Fire up the server
http.ListenAndServe("localhost:3000", r)
fmt.Println("ListenAndServe is blocking")
open.RunWith("http://localhost:3000/test", "firefox")
fmt.Println("Done")
}
ベストアンサー1
リスナーを開き、ブラウザを起動して、サーバー ループに入ります。
l, err := net.Listen("tcp", "localhost:3000")
if err != nil {
log.Fatal(err)
}
// The browser can connect now because the listening socket is open.
err := open.Start("http://localhost:3000/test")
if err != nil {
log.Println(err)
}
// Start the blocking server loop.
log.Fatal(http.Serve(l, r))
別の回答に示されているように、ポーリングする必要はありません。ブラウザが起動される前にリスニング ソケットが開いている場合、ブラウザは接続します。
ListenAndServe は、ソケットを開いて Serve を呼び出す便利な関数です。この回答のコードでは、これらの手順を分割して、リスニングの開始後、Serve へのブロッキング呼び出しの前にブラウザーを開くことができるようにしています。