使用Golang标准库可快速构建RESTful API,通过定义User结构体实现增删改查功能,结合http包路由处理请求,无需第三方框架即可完成HTTP服务搭建。

用Golang构建小型RESTful API服务非常高效,得益于其标准库的强大支持和简洁的语法。下面是一个使用Go标准库实现的简单RESTful API示例,提供对“用户”资源的增删改查(CRUD)操作。
在 models.go 中定义一个简单的 User 结构体:
package main
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
var users = []User{
{ID: 1, Name: "Alice", Age: 25},
{ID: 2, Name: "Bob", Age: 30},
}
在 handlers.go 中实现REST接口逻辑:
package main
import (
"encoding/json"
"net/http"
"strconv"
)
// 获取所有用户
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
// 根据ID获取单个用户
func getUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
idStr := r.URL.Query().Get("id")
id, err := strconv.Atoi(idStr)
if err != nil {
http.Error(w, "无效的ID", http.StatusBadRequest)
return
}
for _, u := range users {
if u.ID == id {
json.NewEncoder(w).Encode(u)
return
}
}
http.Error(w, "用户未找到", http.StatusNotFound)
}
// 创建新用户
func createUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var user User
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
http.Error(w, "请求体解析失败", http.StatusBadRequest)
return
}
// 简单生成ID(生产环境应使用更安全的方式)
user.ID = len(users) + 1
users = append(users, user)
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(user)
}
// 更新用户信息
func updateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var updatedUser User
if err := json.NewDecoder(r.Body).Decode(&updatedUser); err != nil {
http.Error(w, "请求体解析失败", http.StatusBadRequest)
return
}
for i, u := range users {
if u.ID == updatedUser.ID {
users[i] = updatedUser
json.NewEncoder(w).Encode(updatedUser)
return
}
}
http.Error(w, "用户未找到", http.StatusNotFound)
}
// 删除用户
func deleteUser(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Query().Get("id")
id, err := strconv.Atoi(idStr)
if err != nil {
http.Error(w, "无效的ID", http.StatusBadRequest)
return
}
for i, u := range users {
if u.ID == id {
users = append(users[:i], users[i+1:]...)
w.WriteHeader(http.StatusNoContent)
return
}
}
http.Error(w, "用户未找到", http.StatusNotFound)
}
在 main.go 中注册路由并启动服务:
立即学习“go语言免费学习笔记(深入)”;
package main
import "net/http"
func main() {
http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
getUsers(w, r)
case "POST":
createUser(w, r)
default:
http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
}
})
http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
getUser(w, r)
case "PUT":
updateUser(w, r)
case "DELETE":
deleteUser(w, r)
default:
http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
}
})
// 启动服务
http.ListenAndServe(":8080", nil)
}
运行命令:go run *.go
服务将监听 :8080 端口。
http://localhost:8080/users
http://localhost:8080/user?id=1
http://localhost:8080/users,Body为JSONhttp://localhost:8080/user,发送完整用户对象http://localhost:8080/user?id=1
基本上就这些。这个例子展示了如何仅用标准库快速搭建一个功能完整的RESTful服务。适合学习或小型项目使用。后续可扩展日志、中间件、数据库连接等功能。
以上就是Golang构建小型RESTful API服务示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号