Go - 简单Web Server实现与扩展

简单Web Server实现

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)
}

简单Web Server扩展

1. Server的抽象和实现

上述简例只存在一个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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值