From f413315fae482b0b2b39e189a6b09396e148181f Mon Sep 17 00:00:00 2001 From: yanzuoguang Date: Fri, 24 Oct 2025 22:26:21 +0800 Subject: [PATCH] =?UTF-8?q?refactor(server):=E9=87=8D=E6=9E=84HTTP?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将原始main函数中的HTTP处理逻辑拆分到独立文件 - 新增main1.go实现基础HTTP服务器功能 - 新增main2.go增强路由处理和重定向逻辑 - 新增main3.go使用标准库处理程序优化代码结构 - 更新main.go调用新的main3函数并注释其他入口点 - 移除main.go中旧的HTTP处理相关导入和类型定义 --- 24-httpserver/httpserver/main.go | 45 ++---------------------------- 24-httpserver/httpserver/main1.go | 46 +++++++++++++++++++++++++++++++ 24-httpserver/httpserver/main2.go | 40 +++++++++++++++++++++++++++ 24-httpserver/httpserver/main3.go | 26 +++++++++++++++++ 4 files changed, 115 insertions(+), 42 deletions(-) create mode 100644 24-httpserver/httpserver/main1.go create mode 100644 24-httpserver/httpserver/main2.go create mode 100644 24-httpserver/httpserver/main3.go diff --git a/24-httpserver/httpserver/main.go b/24-httpserver/httpserver/main.go index 95fd3e1..16f97c9 100644 --- a/24-httpserver/httpserver/main.go +++ b/24-httpserver/httpserver/main.go @@ -1,46 +1,7 @@ package main -import ( - "io" - "net/http" -) - -type StringHandle struct { - message string -} - -func (sh *StringHandle) ServeHTTP(writer http.ResponseWriter, request *http.Request) { - - Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", - request.Method, request.Proto, request.Host, - request.URL.String(), request.URL.Host, request.RequestURI) - for name, val := range request.Header { - Printfln("Header: %v = %v", name, val) - } - Printfln("RemoteAddr: %v", request.RemoteAddr) - Printfln("ContentLength: %v", request.ContentLength) - Printfln("Body: %v", request.Body) - Printfln("TLS: %v", request.TLS) - Printfln("--------------") - if request.URL.Path == "/favicon.ico" { - Printfln("Request for favicon.ico detected - returning 404") - Printfln("--------------\n") - writer.WriteHeader(http.StatusNotFound) - return - } - writeLen, err := io.WriteString(writer, sh.message) - if err != nil { - Printfln("ServeHTTP Error: %v", err) - return - } - Printfln("ServeHTTP Wrote %d bytes", writeLen) - Printfln("--------------\n") -} - func main() { - err := http.ListenAndServe("localhost:5000", &StringHandle{message: "Hello World!"}) - if err != nil { - Printfln("ListenAndServe Error: %v", err) - return - } + // main1() + // main2() + main3() } diff --git a/24-httpserver/httpserver/main1.go b/24-httpserver/httpserver/main1.go new file mode 100644 index 0000000..4e346b2 --- /dev/null +++ b/24-httpserver/httpserver/main1.go @@ -0,0 +1,46 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle1 struct { + message string +} + +func (sh *StringHandle1) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + + Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", + request.Method, request.Proto, request.Host, + request.URL.String(), request.URL.Host, request.RequestURI) + for name, val := range request.Header { + Printfln("Header: %v = %v", name, val) + } + Printfln("RemoteAddr: %v", request.RemoteAddr) + Printfln("ContentLength: %v", request.ContentLength) + Printfln("Body: %v", request.Body) + Printfln("TLS: %v", request.TLS) + Printfln("--------------") + if request.URL.Path == "/favicon.ico" { + Printfln("Request for favicon.ico detected - returning 404") + Printfln("--------------\n") + writer.WriteHeader(http.StatusNotFound) + return + } + writeLen, err := io.WriteString(writer, sh.message) + if err != nil { + Printfln("ServeHTTP Error: %v", err) + return + } + Printfln("ServeHTTP Wrote %d bytes", writeLen) + Printfln("--------------\n") +} + +func main1() { + err := http.ListenAndServe("localhost:5000", &StringHandle1{message: "Hello World!"}) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +} diff --git a/24-httpserver/httpserver/main2.go b/24-httpserver/httpserver/main2.go new file mode 100644 index 0000000..92bb70e --- /dev/null +++ b/24-httpserver/httpserver/main2.go @@ -0,0 +1,40 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle2 struct { + message string +} + +func (sh *StringHandle2) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + + Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", + request.Method, request.Proto, request.Host, + request.URL.String(), request.URL.Host, request.RequestURI) + + switch request.URL.Path { + case "/favicon.ico": + http.NotFound(writer, request) + case "/message": + writeLen, err := io.WriteString(writer, sh.message) + if err != nil { + Printfln("ServeHTTP Error: %v", err) + return + } + Printfln("ServeHTTP Wrote %d bytes", writeLen) + default: + http.Redirect(writer, request, "/message", http.StatusTemporaryRedirect) + } + Printfln("--------------\n") +} + +func main2() { + err := http.ListenAndServe("localhost:5000", &StringHandle2{message: "Hello World!"}) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +} diff --git a/24-httpserver/httpserver/main3.go b/24-httpserver/httpserver/main3.go new file mode 100644 index 0000000..312ed96 --- /dev/null +++ b/24-httpserver/httpserver/main3.go @@ -0,0 +1,26 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle3 struct { + message string +} + +func (sh *StringHandle3) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + Printfln("Request for %v", request.URL.Path) + io.WriteString(writer, sh.message) +} + +func main3() { + http.Handle("/message", &StringHandle3{message: "Hello World!"}) + http.Handle("/favicon.ico", http.NotFoundHandler()) + http.Handle("/", http.RedirectHandler("/message", http.StatusTemporaryRedirect)) + err := http.ListenAndServe("localhost:5000", nil) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +}