下面我们将从零开始实现一个简单的 Go 后端接口。这个接口将使用 mux
库来处理路由,并提供一个基本的 RESTful API。
1. 安装必要的库
首先,确保已经安装了 mux
库。如果没有安装,可以使用以下命令安装:
go get -u github.com/gorilla/mux
2. 创建项目结构
创建一个新的 Go 项目目录,并在其中创建必要的文件和文件夹。例如:
my-backend-api/
├── main.go
├── handlers/
│ └── user.go
└── models/
└── user.go
3. 编写模型 (models)
在 models/user.go
中定义一个简单的用户模型:
package models
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
4. 编写处理函数 (handlers)
在 handlers/user.go
中定义处理用户相关请求的函数:
package handlers
import (
"encoding/json"
"net/http"
"github.com/gorilla/mux"
"my-backend-api/models"
)
var users = map[string]models.User{
"1": {ID: "1", Name: "Alice", Email: "alice@example.com"},
"2": {ID: "2", Name: "Bob", Email: "bob@example.com"},
}
func GetUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
func GetUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
params := mux.Vars(r)
id := params["id"]
if user, ok := users[id]; ok {
json.NewEncoder(w).Encode(user)
} else {
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
}
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var user models.User
err := json.NewDecoder(r.Body).Decode(&user)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode(map[string]string{"error": "Invalid request payload"})
return
}
users[user.ID] = user
json.NewEncoder(w).Encode(user)
}
func UpdateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
params := mux.Vars(r)
id := params["id"]
var updatedUser models.User
err := json.NewDecoder(r.Body).Decode(&updatedUser)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode(map[string]string{"error": "Invalid request payload"})
return
}
if _, ok := users[id]; ok {
updatedUser.ID = id
users[id] = updatedUser
json.NewEncoder(w).Encode(updatedUser)
} else {
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
}
}
func DeleteUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
params := mux.Vars(r)
id := params["id"]
if _, ok := users[id]; ok {
delete(users, id)
json.NewEncoder(w).Encode(map[string]string{"result": "User deleted"})
} else {
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(map[string]string{"error": "User not found"})
}
}
5. 编写主程序 (main.go)
在 main.go
中设置路由并启动服务器:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
"my-backend-api/handlers"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/users", handlers.GetUsers).Methods("GET")
r.HandleFunc("/users/{id}", handlers.GetUser).Methods("GET")
r.HandleFunc("/users", handlers.CreateUser).Methods("POST")
r.HandleFunc("/users/{id}", handlers.UpdateUser).Methods("PUT")
r.HandleFunc("/users/{id}", handlers.DeleteUser).Methods("DELETE")
fmt.Println("Starting server at port 8080")
if err := http.ListenAndServe(":8080", r); err != nil {
fmt.Println("Error starting server:", err)
}
}
6. 运行程序
在项目根目录下运行以下命令启动服务器:
go run main.go
现在,应该有一个简单的 RESTful API 服务器在 http://localhost:8080
上运行。可以使用 curl
或 Postman 等工具来测试这些接口。例如:
- 获取所有用户:
GET http://localhost:8080/users
- 获取单个用户:
GET http://localhost:8080/users/1
- 创建用户:
POST http://localhost:8080/users
并发送 JSON 数据 - 更新用户:
PUT http://localhost:8080/users/1
并发送 JSON 数据 - 删除用户:
DELETE http://localhost:8080/users/1
这样,就完成了一个简单的 Go 后端接口的编写。
分类:
go
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-08-29 导入java web项目时 web.xml第一行报错
2019-08-29 java启动server时报端口无效解决方法