赞
踩
Go语言拥有强大的http库,利用它很快就可以实现一个简单的web server,以下是一个简单例子。
- //main.go
-
- package main
-
- import (
- "encoding/json"
- "fmt"
- "io"
- "net/http"
- )
-
- //定义注册请求数据的结构体
- type signUpReq struct {
- Email string `json:"email"`
- Password string `json:"password"`
- ConfirmedPassword string `json:"confirmed_password"`
- }
-
- //定义响应数据的结构体
- type commonResponse struct {
- Msg string `json:"msg"`
- Data interface{} `json:"data"`
- }
-
- func home(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "这是主页")
- }
-
- func signUp(w http.ResponseWriter, r *http.Request) {
- //创建新的结构体 用于存放client的请求数据
- req := &signUpReq{}
- //读取Body数据
- body, err := io.ReadAll(r.Body)
- if err != nil {
- fmt.Fprintf(w, "read body failed: %v", err)
- //如果读取失败 立即返回
- return
- }
- //对读取到的Body数据进行反序列化 存于req
- err = json.Unmarshal(body, req)
- if err != nil {
- fmt.Fprintf(w, "deserialized failed: %v", err)
- //如果解析失败 同样立即返回
- return
- }
- //拿到反序列化req数据 就可以去做进一步处理 如进行真正注册、写入数据库等等
- //这里只是做一下简单打印
- fmt.Printf("Log-Req-%v", req)
-
- //创建响应数据
- resp := &commonResponse{
- Msg: "Success",
- Data: "Sign up successful",
- }
- //对响应数据进行序列化处理
- respJson, _ := json.Marshal(resp)
- //写入响应
- fmt.Fprint(w, string(respJson))
- }
-
- func main() {
- //注册路由 当命中路由后会执行后面的func
- http.HandleFunc("/", home)
- http.HandleFunc("/signup", signUp)
- //启动服务监听
- http.ListenAndServe(":8080", nil)
- }
上述简例只存在一个Server服务,即一个8080监听端口。如果将”注册路由“和”启动监听“封装起来,表达一种逻辑上的抽象,它代表的是对某个端口的进行监听的实体,必要的时候,就可以开启多个Server,来监听多个端口。
新建一个server.go,定义一个Server接口,对”注册路由“和”启动监听“操作进行封装
- //server.go
-
- package main
-
- import (
- "net/http"
- )
-
- //Server 定义一个Server抽象接口
- type Server interface {
- //Route 用于注册路由
- Route(pattern string, handlerFunc func(writer http.ResponseWriter, request *http.Request))
- //Start 用于启动监听
- Start(address string) error
- }
-
- type sdkHttpServer struct {
- name string
- }
-
- //接口的具体实现
- func (s *sdkHttpServer) Route(pattern string, handlerFunc func(writer http.ResponseWriter, request *http.Request)) {
- //实际还是调用原始的http接口
- http.HandleFunc(pat
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。