您现在的位置是:首页 >其他 >golang web学习随便记1网站首页其他
golang web学习随便记1
直接上第一个例子代码 first_webapp/server.go
package main
import (
"fmt"
"net/http"
)
func handler(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "hello world, %s!", request.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8088", nil)
}
确保golang基本环境已经具备,然后到项目目录 first_webapp下
sjg@sjg-PC:~/go/src/gostudy/first_webapp$ go mod init
sjg@sjg-PC:~/go/src/gostudy/first_webapp$ go run .
然后浏览器打开 http://localhost:8088 就可以看到输出 (如果输入 http://localhost:8088/yes/it/is,那么 request.URL.Path 对应字符串 /yes/it/is,代码中用字符串切片[1:]去掉了第1个字符/)
一个handler可以是一个handler func,它带有两个参数,类型分别为 http.ResponseWriter 和 *http.Request 。主程序中主要是2个动作:(为指定的路由)设定 handler 和在指定端口启动监听。
接下来,我们新建项目chitchat,来修改一下上面的代码:先创建 http.Server 对象server,设定好handler、监听端口等,然后调用该对象的 server.ListenAndServe() 启动监听。在此时,我们使用多路复用器(multiplexer)作为server的handler (多路复用器参见 golang学习随便记11-goroutine和channel(3)_sjg20010414的博客-CSDN博客)。多路复用器概念有点类似Windows里面的WaitForMultipleObjects,即等待多个事件信号,其中任何一个触发就进入相应处理。
package main
import (
"fmt"
"net/http"
)
func main() {
mux := http.NewServeMux()
files := http.FileServer(http.Dir("./public"))
mux.Handle("/static/", http.StripPrefix("/static/", files))
mux.HandleFunc("/", index)
server := &http.Server{
Addr: "0.0.0.0:8088",
Handler: mux,
}
server.ListenAndServe()
}
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "暂未实现首页")
}
上面的代码中,多路复用器mux设定了两种信号的处理:对路由 /static/* 用一个 (http.FileServer函数创建的)http.Handler对象处理,去掉URL路径前缀/static/,返回(相对于当前项目根目录的)/public路径下的*所代表的文件(例如,浏览器访问 http://localhost:8088/static/css/bootstrap.min.css,返回给客户的是<doc_root>/public/css/bootstrap.min.css);对路由/,和前述类似,用一个handler func处理。