小编典典

转到:服务器开始侦听后,如何启动浏览器?

go

在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")
}

阅读 219

收藏
2020-07-02

共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的阻止调用之前打开浏览器。

2020-07-02