如何在命令行中运行Golang的main.go打开网页?

如何在命令行中运行Golang的main.go打开网页? (另外什么是"反引号"??我用反引号标记代码但显示效果很差。)

我使用Go语言创建了一个简单的网页:

import (

"fmt"

"net/http"

)

func handlerFunc(w http.ResponseWriter, r *http.Request) {

fmt.Fprint(w, "<h1>Welcome to my website!</h1>")

}

func main() {

http.HandleFunc("/", handlerFunc)

http.ListenAndServe(":80", nil)

}

当我尝试执行>go run main.go时,Windows会临时打开一个新的命令窗口,但不会打开浏览器页面。我已经确认Go安装正确,Go工作区已设置,所有路径都已配置。

如何让程序自动打开浏览器?


更多关于如何在命令行中运行Golang的main.go打开网页?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

如果这确实没有输出任何内容,那么你的服务器正在运行并应该提供内容。你尝试过打开 http://localhost:8000 吗?

更多关于如何在命令行中运行Golang的main.go打开网页?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


检查对 http.ListenAndServe() 的调用返回值,它很可能会提示您无法绑定 80 端口,因为需要超级用户/管理员权限才能执行此操作。

请使用大于 1024 的端口号。

func main() {
    fmt.Println("hello world")
}

请使用 fmt.Println 打印监听和服务的错误结果,并确保在读取输出前窗口不会关闭。作为最后手段,您可以在打印后直接添加 timer.Sleep

然后复制并粘贴您看到的错误信息。

另外,需要安装 xampp,至少不需要 apache!

func main() {
    fmt.Println("hello world")
}

BINGO!!!

所以,这是我第一次涉足服务器编程……我完全不知道自己在做什么。我原以为运行 go main 会打开浏览器,但实际上它创建了与服务器相关的内容,然后我必须手动打开浏览器并输入网址。 这样做之后,一切就按预期运行了。

感谢大家耐心且积极的反馈!!!

  1. 您可以在电脑上指定从 102565535 范围内的端口。
  2. 弹出窗口 “Windows 安全警报” 是为了提示有一项服务(您的 Go 应用程序)需要使用一个端口通过互联网进行通信。点击 允许访问 按钮不会对您的电脑造成任何危害,因为此应用程序仅仅是您的 Go Web 应用。

如果我说错了,请纠正我。

sklanglykrangly: 第一次尝试从命令行运行网页。我实际上是在xampp目录中工作。我使用xampp进行其他本地开发。

关于此有两点小观察:

  • 你上面的代码是提供页面的,因此你需要一个浏览器来访问此服务器提供的页面。不要指望你的代码会打开任何浏览器。
  • 如果你的系统中运行了其他服务器,请注意使用的端口,不要在你的Go程序中使用这些端口。

弹窗只是来自Windows防病毒软件。

我使用xampp进行其他本地开发,没有出现问题。在我进行这些操作时它正在运行。

我这样做是为了打印错误,但没有输出任何内容:

func main() {
    http.HandleFunc("/", handlerFunc)
    http.ListenAndServe(":8000", nil)
    a := http.ListenAndServe(":8000", nil)
    fmt.Println(a)

是的,我尝试过8080、8000、3000和其他端口。我突然想到——我是否应该将所有Go工作文件都保存在Go工作区位置(D:\Documents\Go)?我对Go完全陌生,这是我第一次尝试从命令行运行网页。实际上我是在xampp目录中工作。我使用xampp进行其他本地开发。

附上了具体情况的截图。第一张是运行main后弹出的窗口。

web-from-cmd-error

接下来是我的路径信息。我很确定这些都是正确的。

go-path

要在Go程序中自动打开浏览器,可以使用os/exec包来执行系统命令。以下是修改后的代码示例:

package main

import (
    "fmt"
    "net/http"
    "os/exec"
    "runtime"
    "time"
)

func handlerFunc(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "<h1>Welcome to my website!</h1>")
}

func openBrowser(url string) {
    var cmd string
    var args []string

    switch runtime.GOOS {
    case "windows":
        cmd = "cmd"
        args = []string{"/c", "start", url}
    case "darwin":
        cmd = "open"
        args = []string{url}
    default: // linux, unix, etc.
        cmd = "xdg-open"
        args = []string{url}
    }
    
    exec.Command(cmd, args...).Start()
}

func main() {
    http.HandleFunc("/", handlerFunc)
    
    // 给服务器一点启动时间
    go func() {
        time.Sleep(100 * time.Millisecond)
        openBrowser("http://localhost:80")
    }()
    
    http.ListenAndServe(":80", nil)
}

关于反引号的问题:在Markdown中,反引号(`)用于标记代码。单个反引号用于行内代码,三个反引号用于代码块:

行内代码:`go run main.go`

代码块:
```go
package main
import "fmt"
func main() {
    fmt.Println("Hello World")
}

确保在代码块的开头和结尾使用三个单独的反引号,而不是其他字符。
回到顶部