main.go
package main import ( "net/http" "com.jtthink.net/myhttpserver/core" ) type MyHandler struct { } func(*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){ writer.Write([]byte("hello,myhandler")) } func main() { router:=core.DefaultRouter() router.Add("/",&NewsController{}) http.ListenAndServe(":8099",router) }
NewsController.go
package main import "com.jtthink.net/myhttpserver/core" type NewsController struct { core.MyController } func(this *NewsController) GET() { this.Ctx.WriteString("this is newscontroller") } func(this *NewsController) POST() { this.Ctx.WriteString("this is newscontroller for POST") }
MyRouter.go
package core import ( "net/http" ) type MyHandlerFunc func(ctx *MyContext) type MyRouter struct { Mapping map[string]ControllerInterface } func DefaultRouter() *MyRouter { return &MyRouter{make(map[string]ControllerInterface)} } //加入 path 和Controller的对应关系 func(this *MyRouter) Add(path string,c ControllerInterface) { this.Mapping[path]=c } func(this *MyRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request){ //chrome 会默认请求图标地址 if f,OK:=this.Mapping[request.URL.Path];OK{ f.Init(&MyContext{request,writer}) //关键代码 if request.Method=="GET"{//没有做防错处理 f.GET() } if request.Method=="POST"{//没有做防错处理 f.POST() } } }
MyController.go
package core type MyController struct { Ctx *MyContext } func(this *MyController) Init (ctx *MyContext) { this.Ctx=ctx } type ControllerInterface interface { Init(ctx *MyContext) GET() POST() }
MyContext.go
package core import "net/http" type MyContext struct { //上下文对象 request *http.Request http.ResponseWriter } func(this *MyContext) WriteString(str string){ this.Write([]byte(str)) }
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/11260973.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能