flag是 go 提供的一个标准包,用于解析命令行参数。
上代码:
package main
import (
"flag" // 先引入flag包
"log"
"net/http"
)
// 设置默认 addr参数,如果启动应用的时候不带参数,就使用默认参数。
// 这里 flag.String的三个参数,分别是 参数名,参数值,参数说明。
var addr = flag.String("addr", ":8080", "http service address")
func serveHome(w http.ResponseWriter, r *http.Request) {
log.Println(r.URL)
if r.URL.Path != "/" {
http.Error(w, "Not found", http.StatusNotFound)
return
}
if r.Method != "GET" {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
http.ServeFile(w, r, "home.html")
}
func main() {
// 解析参数
flag.Parse()
hub := newHub()
go hub.run()
http.HandleFunc("/", serveHome)
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
serveWs(hub, w, r)
})
err := http.ListenAndServe(*addr, nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
运行程序的时候,可以加 -h 查看 参数说明:
$ go run *.go -h Usage of C:\Users\11212\AppData\Local\Temp\go-build020509006\b001\exe\client.exe : -addr string http service address (default ":8080") exit status 2
按上图格式,通过 -addr 加地址参数。
go run *.go -addr 127.0.0.1:8888
程序正常启动,addr更新为了 127.0.0.1:8888