用Go标准库实现RESTful API的关键是:定义带json标签的导出结构体解析请求,用ServeMux结合路径截取模拟REST路由,封装writeJSON/writeError统一响应,最后通过http.ListenAndServe启动服务。

用 Go 的 net/http 和标准库 encoding/json 实现 RESTful API 并不复杂,关键在于合理组织路由、正确处理请求/响应、统一错误反馈,以及保持代码可读和可维护。
Go 中解析 JSON 请求体最常用方式是通过结构体标签(json:)映射字段。注意导出字段(首字母大写)才能被 JSON 包访问。
例如用户注册接口需要接收 JSON:
type UserCreateRequest struct {
Name string `json:"name"`
Email string `json:"email"`
Age int `json:"age"`
}在 handler 中解析:
立即学习“go语言免费学习笔记(深入)”;
func createUser(w http.ResponseWriter, r *http.Request) {
var req UserCreateRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
// 处理业务逻辑,比如存入内存或数据库
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{"status": "created"})
}net/http.ServeMux 支持基础路径匹配,适合小型 API。RESTful 路由建议按资源设计,如 /users、/users/{id}。
由于 ServeMux 不支持路径参数(如 {id}),可用简单字符串截取或升级为轻量路由器(如 gorilla/mux)。但纯 net/http 也能应付:
http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(r.URL.Path, "/")
if len(parts) < 3 {
http.Error(w, "Bad path", http.StatusBadRequest)
return
}
id := parts[2]
switch r.Method {
case "GET":
getUserByID(w, r, id)
case "PUT":
updateUserByID(w, r, id)
case "DELETE":
deleteUserByID(w, r, id)
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
})避免每个 handler 都手动设 header 和状态码。封装一个响应工具函数更清晰:
func writeJSON(w http.ResponseWriter, status int, v interface{}) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
json.NewEncoder(w).Encode(v)
}
func writeError(w http.ResponseWriter, msg string, status int) {
writeJSON(w, status, map[string]string{"error": msg})
}使用示例:
if req.Name == "" {
writeError(w, "name is required", http.StatusBadRequest)
return
}最后启动 HTTP 服务,建议加日志和基本 panic 恢复(生产环境推荐用 http.Server 配置超时等):
func main() {
http.HandleFunc("/users", listUsers)
http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
// 如上路由分发逻辑
})
fmt.Println("Server starting on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}运行后即可用 curl 测试:
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"name":"Alice","email":"alice@example.com","age":30}'基本上就这些。不用框架也能写出干净、符合 REST 原则的 API,重点是结构体映射准确、路由逻辑清晰、错误反馈及时——其余就是 Go 本身简洁有力的风格在起作用。
以上就是如何使用Golang实现RESTful API_使用net/http和JSON解析构建接口的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号