答案:使用Go标准库net/http可高效构建REST接口,通过HTTP方法对应资源操作,结合路由注册、JSON处理、状态码设置及中间件提升可维护性。示例展示了用户服务的增删改查,支持GET、POST等方法,返回标准JSON格式,并推荐添加日志、统一错误处理和响应结构,适用于轻量级API或微服务场景。

REST(Representational State Transfer)是一种设计风格,强调资源的操作通过标准 HTTP 方法完成。常见操作与 HTTP 方法对应如下:
net/http 提供了 DefaultServeMux 作为默认的多路复用器,可通过 http.HandleFunc 注册路径和处理器函数。
示例:定义一个简单的用户服务package main
import (
"encoding/json"
"log"
"net/http"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
var users = []User{
{ID: 1, Name: "Alice", Email: "alice@example.com"},
}
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
func createUser(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "只支持 POST 请求", http.StatusMethodNotAllowed)
return
}
var user User
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
user.ID = len(users) + 1
users = append(users, user)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(user)
}
func getUserByID(w http.ResponseWriter, r *http.Request) {
id := r.URL.Path[len("/users/"):]
for _, u := range users {
if fmt.Sprint(u.ID) == id {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(u)
return
}
}
http.Error(w, "用户不存在", http.StatusNotFound)
}
func main() {
http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
getUsers(w, r)
} else if r.Method == "POST" {
createUser(w, r)
} else {
http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
}
})
http.HandleFunc("/users/", getUserByID)
log.Println("服务器启动在 :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
随着接口增多,使用 DefaultServeMux 可能不够灵活。可以手动创建 ServeMux 或封装更清晰的结构。
建议做法:func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s %s", r.RemoteAddr, r.Method, r.URL)
next(w, r)
}
}
http.HandleFunc("/users", loggingMiddleware(getUsers))
正确设置响应头、状态码和 JSON 输出是构建专业 API 的关键。
立即学习“go语言免费学习笔记(深入)”;
type Response struct {
Success bool `json:"success"`
Data interface{} `json:"data,omitempty"`
Message string `json:"message,omitempty"`
}
以上就是Golang如何使用net/http实现REST接口_Golang net/http REST接口实践详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号