golang原生net/http手写自己的rpc框架

前言

首先golang 原生的net/http就已经很强大了,正因如此,手写框架的门槛就很低了,所以既python之后的go,框架多之又多,那不如我们自己写一个看看效果

目录

scgo/
|__api
|    └──Controller.go
├── router
│   └── Router.go
├── stock
│   └── RouterStock.go
├── scgo.go

原理

核心点:实现http.server.go中这个接口
在这里插入图片描述
RouterStock.go
这是一个存放url的map集合同时也是Handler的实现类
我们的Controller就是一个一个的Handler是实现类,而更关键的RouterStock也是一个Handler的实现类,它的存在是为了做请求转发

package stock

import "net/http"
//仓库
type RouterStock struct {
	routerStock map[string]http.Handler
}
func RouterStockInit() *RouterStock{
	return &RouterStock{
		make(map[string]http.Handler),
	}
}
//url-handler入库存储我们的Controller就是一个又一个Hander
func (h *RouterStock) AddRouterStock(url string,handler http.Handler)  {
	h.routerStock[url] = handler
}
//转发基站-请求转发
func (h *RouterStock)ServeHTTP(resp http.ResponseWriter, req *http.Request)  {
	urlPath := req.URL.Path
	if hl, ok := h.routerStock[urlPath]; ok {
		hl.ServeHTTP(resp, req)
		return
	}
	http.NotFound(resp, req)
}

Controller.go

package api

import "net/http"

type HelloController struct {
}

func (h *HelloController) ServeHTTP(w http.ResponseWriter,req *http.Request)  {
	w.Write([]byte("hello scgo"))
}

Router.go
这是我们的路由表,用来初始化路由仓库

package router

import (
	"scgo/api"
	"scgo/stock"
)

func InitRouter() *stock.RouterStock{
	router := stock.RouterStockInit()
	router.AddRouterStock("/hello/scgo/", &api.HelloController{})
	return router
}

scgo.go启动类

package main

import (
	"flag"
	"gin/mux"
	"net/http"
	router2 "scgo/router"
)

func main() {
	flag.StringVar(&mux.Port, "port", ":8080", "port to listen")
	flag.Parse()
	router := router2.InitRouter()
	http.ListenAndServe(mux.Port, router)
}

流程图

请求
根据路由分发
返回响应
路由分发
返回响应
路由分发
返回响应
路由分发
返回响应
用户
RouterStock
A.Controller
B.Controller
C.Controller
D.Controller

测试

根据url分发
baseUrl
Routerstock
controller

在这里插入图片描述

总结

go语言延展性很强,它不像是java那样生态已经十分十分健全了,它的可拓展性是很强的,不妨为了学习而创造

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值