快速创建一个httpserver
package main import ( "net/http" "fmt" ) type MyHandler struct{ } func(*MyHandler) ServeHTTP(write http.ResponseWriter,request *http.Request){ write.Write([]byte("hello,myhandler")); } func main(){ handler := new(MyHandler) server := http.Server{Addr:":8099",Handler:handler} err := server.ListenAndServe() if err != nil{ fmt.Println(err) } }
路由 设置cookie 注销 判断登录

package main import ( "net/http" "time" ) type MyHandler struct { } func(*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){ writer.Write([]byte("hello,myhandler")) } func main() { mymux:=http.NewServeMux() mymux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("index")) }) mymux.HandleFunc("/login", func(writer http.ResponseWriter, request *http.Request) { getUserName:= request.URL.Query().Get("username") if getUserName!=""{ c:=&http.Cookie{Name:"username",Value:getUserName,Path:"/"} http.SetCookie(writer,c) } writer.Write([]byte("这里是登录页面")); }) mymux.HandleFunc("/unlogin", func(writer http.ResponseWriter, request *http.Request) { c:=&http.Cookie{Name:"username",Value:"",Path:"/",Expires:time.Now().AddDate(-1,0,0)} http.SetCookie(writer,c) writer.Header().Set("Content-type","text/html") writer.Write([]byte("unlogin....")); script:=`<script> setTimeout(()=>{self.location='/'},2000) </script>` writer.Write([]byte(script)) }) http.ListenAndServe(":8099",mymux) }
自定义路由支持get、post

package main import ( "net/http" "gospace/core" ) type MyHandler struct { } func(*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){ writer.Write([]byte("hello,myhandler")) } func main() { router:=core.DefaultRouter() router.Get("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("get abc")) }) router.Post("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("post abc")) }) http.ListenAndServe(":8099",router) }

package core import ( "net/http" ) type MyRouter struct { Mapping map[string]map[string]http.HandlerFunc } func DefaultRouter() *MyRouter { return &MyRouter{make(map[string]map[string]http.HandlerFunc)} } func(this *MyRouter) Get(path string,f http.HandlerFunc) { if this.Mapping["GET"]==nil{ this.Mapping["GET"]=make(map[string]http.HandlerFunc) } this.Mapping["GET"][path]=f } func(this *MyRouter) Post(path string,f http.HandlerFunc) { if this.Mapping["POST"]==nil{ this.Mapping["POST"]=make(map[string]http.HandlerFunc) } this.Mapping["POST"][path]=f } func(this *MyRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request){ f:=this.Mapping[request.Method][request.URL.Path] f(writer,request) }
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/11255165.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 加持,客户体验更智能
2018-07-27 php + mysql 分布式事务
2018-07-27 MySQL的四种事务隔离级别