示例代码
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request){
hello := "Hello Wrold!"
// 这个写入到w的是输出到客户端的
fmt.Fprintf(w, "%s\n", hello)
fmt.Fprintf(w, "You are in the index\n")
}
func login(w http.ResponseWriter, r *http.Request){
fmt.Fprintf(w, "You are in the login\n")
}
func home(w http.ResponseWriter, r *http.Request){
fmt.Fprintf(w, "You are in the home\n")
}
func news(w http.ResponseWriter, r *http.Request){
fmt.Fprintf(w, "You are in the news\n")
}
func main(){
// 创建多路复用器
mux := http.NewServeMux()
// 将路由指向处理器
mux.HandleFunc("/", index)
mux.HandleFunc("/login", login)
mux.HandleFunc("/home", home)
mux.HandleFunc("/news", news)
server := &http.Server{
Addr: "0.0.0.0:9090",
Handler: mux,
}
err := server.ListenAndServe()
if err != nil{
fmt.Println(err)
}
}
相关说明
func index(w http.ResponseWriter, r *http.Request){
hello := "Hello Wrold!"
// 这个写入到w的是输出到客户端的
fmt.Fprintf(w, "%s\n", hello)
fmt.Fprintf(w, "You are in the index\n")
}
这几行代码定义了一个名为index
的函数(处理器),其中第一个参数为ResponseWriter接口,第二个参数为指向Request的指针
收到请求之后,index
函数会先从Request
中提取出相关的信息,然后创建一个http响应
,最后再通过ResponseWriter
接口将数据返回给客户端
其中回复的首先是一个%s
,这个是格式化指示符(格式化为字符串)
,后面的参数hello
则为这个指示符的内容,为"Hello Wrold!"
。\n
则为换行符,换行后直接回复了另外一串字符串"You are in the index\n"
main(){
····
}
在main
函数中首先创建了一个多路复用器,然后通过一些代码将接收到的请求重定向到处理器。
net/http
标准库提供了一个默认的多路复用器,这个多路复用器可以通过调用NewServeMux
函数来创建:
mux := http.NewServeMux()
为了将发送至根的URL重定向到处理器,程序使用了HandleFunc
函数:
mux.HandleFunc("/", index)
这个函数接受一个URL和一个处理器名字作为参数,并将针对给定URL的请求转发至指定的处理器处理。
另外,所有的处理器都接受一个ResponseWriter
接口与一个指向Request
结构的指针作为参数,并且所有的请求参数都可以通过访问Request
结构得到,所以程序并不需要向处理器显示地传入任何请求
参考文档
1、郑兆雄 著 黄建宏 译. Go Web编程[[M]. 北京:人民邮电出版社. 2017.12:18-21,27-28
版权属于:谁把年华错落成诗 所有,转载请注明出处!
本文链接:https://blog.pomears.com/archives/43.html
如果博客部分链接出现404,请留言或者联系博主修复。