欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Go 网络编程:HTTP服务与客户端开发

Go 网络编程:HTTP服务与客户端开发

2025/6/22 19:54:25 来源:https://blog.csdn.net/tenkofx/article/details/148780155  浏览:    关键词:Go 网络编程:HTTP服务与客户端开发

Go 在标准库中内置了功能强大的 net/http 包,可快速构建高并发、高性能的 HTTP 服务,广泛应用于微服务、Web后端、API中间层等场景。


一、快速创建一个HTTP服务

示例:最简Hello服务
package mainimport ("fmt""net/http"
)func helloHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, Go Web!")
}func main() {http.HandleFunc("/", helloHandler)fmt.Println("Listening on http://localhost:8080/")http.ListenAndServe(":8080", nil)
}

二、请求与响应对象详解

  • • http.Request:封装了客户端请求的所有信息(URL、Header、Body等)
  • • http.ResponseWriter:用于构造服务器的响应
示例:获取请求信息
func infoHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Method: %s\n", r.Method)fmt.Fprintf(w, "URL: %s\n", r.URL.Path)fmt.Fprintf(w, "Header: %v\n", r.Header)
}

三、处理URL参数与POST数据

1. 获取查询参数
func queryHandler(w http.ResponseWriter, r *http.Request) {name := r.URL.Query().Get("name")fmt.Fprintf(w, "Hello, %s!", name)
}

访问:http://localhost:8080/query?name=Go

2. 处理表单数据(POST)
func formHandler(w http.ResponseWriter, r *http.Request) {r.ParseForm()username := r.FormValue("username")fmt.Fprintf(w, "Welcome, %s!", username)
}

四、自定义HTTP路由与Handler

使用 http.ServeMux
func main() {mux := http.NewServeMux()mux.HandleFunc("/hello", helloHandler)mux.HandleFunc("/info", infoHandler)http.ListenAndServe(":8080", mux)
}
使用第三方路由器(如 gorilla/muxchi 等)
// 示例略,可根据需要引入第三方库

五、构建HTTP客户端请求

Go 提供了强大的 http.Client 支持 GET/POST 等请求。

示例:GET请求
resp, err := http.Get("https://httpbin.org/get")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
示例:POST请求
data := url.Values{"name": {"Go"}}
resp, err := http.PostForm("https://httpbin.org/post", data)
defer resp.Body.Close()

六、JSON接口的处理

JSON响应
func jsonHandler(w http.ResponseWriter, r *http.Request) {type Resp struct {Status string `json:"status"`}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(Resp{"ok"})
}
JSON请求解析
func receiveJSON(w http.ResponseWriter, r *http.Request) {type Req struct {Name string `json:"name"`}var data Reqjson.NewDecoder(r.Body).Decode(&data)fmt.Fprintf(w, "Hello, %s", data.Name)
}

七、静态文件服务

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("public"))))

访问 /static/index.html 实际读取 public/index.html 文件。


八、HTTP中间件的编写

中间件常用于实现日志、认证、限流等功能。

func loggingMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {log.Printf("Request: %s %s", r.Method, r.URL.Path)next.ServeHTTP(w, r)})
}

九、启动HTTPS服务(SSL)

http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)

用于生产环境时,请使用自动证书工具如 Let’s Encrypt + Caddy/Nginx 做代理。


十、总结

能力工具与API
启动Web服务http.ListenAndServe
构造REST接口HandlerFunc + JSON 编解码
发起HTTP请求http.Gethttp.Posthttp.Client
路由与中间件ServeMux 或第三方路由器
文件服务与HTTPShttp.FileServer / ListenAndServeTLS

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词