在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") }
打开侦听器,启动浏览器,然后进入服务器循环:
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的阻止调用之前打开浏览器。