答案:使用Golang标准库net/http创建RESTful API,通过结构体和切片在内存中实现用户数据的增删改查,配合sync.Mutex保证并发安全,支持GET、POST、PUT、DELETE方法,数据重启后丢失,适合学习和小型项目。

用Golang创建一个RESTful API来操作内存中的数据,可以通过标准库 net/http 实现路由和请求处理,结合结构体和切片存储数据。下面是一个完整、简洁的示例,实现对用户信息的增删改查(CRUD)。
定义数据结构和内存存储
使用一个结构体表示用户,并用切片作为内存数据库,配合互斥锁保证并发安全。
package mainimport ( "encoding/json" "log" "net/http" "strconv" "sync")type User struct { ID int `json:"id"` Name string `json:"name"` Age int `json:"age"`}var ( users = []User{} nextID = 1 mu sync.Mutex)
实现RESTful路由和处理函数
注册不同的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("/users/", func(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { getUser(w, r) } else if r.Method == "PUT" { updateUser(w, r) } else if r.Method == "DELETE" { deleteUser(w, r) } }) log.Println("服务启动在 :8080") log.Fatal(http.ListenAndServe(":8080", nil))}
编写CRUD处理函数
每个函数处理对应的逻辑,包括解析请求、操作数据、返回JSON。
获取所有用户
func getUsers(w http.ResponseWriter, r *http.Request) { mu.Lock() defer mu.Unlock() w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(users)}
创建用户
func createUser(w http.ResponseWriter, r *http.Request) { var user User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { http.Error(w, "请求体格式错误", http.StatusBadRequest) return } mu.Lock() defer mu.Unlock() user.ID = nextID nextID++ users = append(users, user) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(user)}
根据ID获取单个用户
func getUser(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Path[len("/users/"):]) if err != nil { http.Error(w, "无效的用户ID", http.StatusBadRequest) return } mu.Lock() defer mu.Unlock() for _, user := range users { if user.ID == id { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) return } } http.Error(w, "用户未找到", http.StatusNotFound)}
更新用户
func updateUser(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Path[len("/users/"):]) if err != nil { http.Error(w, "无效的用户ID", http.StatusBadRequest) return } var updatedUser User if err := json.NewDecoder(r.Body).Decode(&updatedUser); err != nil { http.Error(w, "请求体格式错误", http.StatusBadRequest) return } mu.Lock() defer mu.Unlock() for i, user := range users { if user.ID == id { updatedUser.ID = id users[i] = updatedUser w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(updatedUser) return } } http.Error(w, "用户未找到", http.StatusNotFound)}
删除用户
func deleteUser(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Path[len("/users/"):]) if err != nil { http.Error(w, "无效的用户ID", http.StatusBadRequest) return } mu.Lock() defer mu.Unlock() for i, user := range users { if user.ID == id { users = append(users[:i], users[i+1:]...) w.WriteHeader(http.StatusNoContent) return } } http.Error(w, "用户未找到", http.StatusNotFound)}
基本上就这些。这个例子使用标准库实现了完整的RESTful API,数据保存在内存中,适合学习或小型项目。注意它没有持久化,重启后数据会丢失。实际项目中可扩展为使用数据库或加入验证、日志、中间件等。结构清晰,易于理解和修改。
以上就是如何用Golang创建一个RESTful API来对内存中的数据进行增删改查的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1401968.html
微信扫一扫
支付宝扫一扫