了解goweb服务工作流程
1、简单实现
使用net/http包
通过处理器函数处理请求
创建服务器的步骤:
1)创建一个函数处理器,函数的入参必须是http.ResponseWriter和http.Request指针类型
2)在main函数中调用http中的HandleFunc函数指定处理指定请求的处理器
HandleFun函数能自动将1)中的函数转换为处理器
3)设置路由
具体代码
package main
import (
"fmt"
"net/http"
)
// 创建处理器函数
func handler(w http.ResponseWriter,r * http.Request){
fmt.Fprintln(w,"hello world!",r.URL.Path)
}
func main(){
// 适配器
http.HandleFunc("/",handler) // 目录 处理器
// 创建路由
http.ListenAndServe(":8080",nil) //端口 多路复用器
}
go build helloworld.go
生成helloworld.exe
在window 终端 start helloworld.exe
在linux 终端 ./ helloworld
然后在浏览器可以打开了
2、通过处理器处理请求
处理器需要实现Handler接口中的ServHTTP方法
package main
import (
"fmt"
"net/http"
)
/* 实现Handler接口
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
*/
type Myhandler struct{}
func (h *Myhandler)ServeHTTP( w http.ResponseWriter,r * http.Request){
fmt.Fprintln(w,"正在通过处理器处理你的请求")
}
func main(){
myHandler := Myhandler{}
// 调用用处理器
http.Handle("/myHandler",&myHandler)
http.ListenAndServe(":8080",nil) //端口 多路复用器
}
3、通过详细配置服务器中的参数
package main
import (
"fmt"
"net/http"
"time"
)
type Myhandler struct{}
func (h *Myhandler)ServeHTTP( w http.ResponseWriter,r * http.Request){
fmt.Fprintln(w,"通过详细配置服务器的信息来处理请求")
}
func main(){
myHandler := Myhandler{}
// 调用用处理器
server := http.Server{
Addr: ":8080",
Handler: &myHandler,
ReadTimeout: 2 * time.Second,
}
server.ListenAndServe()
}
4、通过自定义多路复用器
以上的方式在调用ListenAndServe(":8080", nil)时第二个参数传入的都是nil,使用的都是默认的多路复用器DefaultServeMux,我们也可以自己创建多路复用器
package main
import (
"fmt"
"net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "通过自己创建的多路复用器处理请求!", r.URL.Path)
}
func main() {
//创建多路复用器
mux := http.NewServeMux()
mux.HandleFunc("/", handler)
//创建路由
http.ListenAndServe(":8080", mux)
}