新闻中心
如何使用 Golang 编写一个 JSON 接口服务器_Golang RESTful API 实战演练
答案:使用Golang标准库构建RESTful API,实现用户管理的增删改查功能。通过net/http处理路由与请求,encoding/json解析数据,sync.Mutex保障并发安全,以map模拟存储,创建、读取、更新和删除用户,并用curl测试接口,展示轻量高效的JSON服务实现过程。

构建一个 JSON 接口服务器是 Golang 的常见应用场景。它轻量、高效,非常适合编写 RESTful API。下面通过一个简单的实战示例,带你一步步实现一个支持增删改查(CRUD)的用户管理接口。
初始化项目结构
创建项目目录并初始化模块:
mkdir go-rest-apicd go-rest-api
go mod init go-rest-api
我们不依赖第三方框架,仅使用标准库 net/http 和 encoding/json,保持简洁。
定义数据模型和存储
创建一个 User 结构体,并使用 map 模拟内存存储:
type User struct {ID int json:"id"
Name string json:"name"
Email string json:"email"
}
用 map 存储用户数据,配合互斥锁保证并发安全:
var (users = make(map[int]User)
mu = sync.Mutex{}
nextID = 1
)
编写处理函数
每个 HTTP 请求对应一个处理函数。这些函数需满足 http.HandlerFunc 签名。
获取所有用户
小云雀
剪映出品的AI视频和图片创作助手
1949
查看详情
func getUsers(w http.ResponseWriter, r *http.Request) {mu.Lock()
defer mu.Unlock()
var result []User
for _, u := range users {
result = append(result, u)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(result)
}
创建用户
func createUser(w http.ResponseWriter, r *http.Request) {if r.Method != http.MethodPost {
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
}
mu.Lock()
defer mu.Unlock()
user.ID = nextID
nextID++
users[user.ID] = user
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(user)
}
获取单个用户
func getUser(w http.ResponseWriter, r *http.Request) {id, _ := strconv.Atoi(r.URL.Path[len("/users/"):])
mu.Lock()
defer mu.Unlock()
user, exists := users[id]
if !exists {
http.Error(w, "用户不存在", http.StatusNotFound)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
}
更新和删除用户 可以类似实现,分别使用 PUT 和 DELETE 方法,解析路径中的 ID 并操作 map。
注册路由并启动服务器
在 main 函数中设置路由并监听端口:
func main() {http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
getUsers(w, r)
} else if r.Method == http.MethodPost {
createUser(w, r)
}
})
http.Han
dleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {if r.Method == http.MethodGet {
getUser(w, r)
}
})
fmt.Println("服务器启动在 :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
运行服务后,可用 curl 测试:
curl -X POST http://localhost:8080/users \-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@example.com"}'
基本上就这些。这个例子展示了如何用 Go 标准库快速搭建一个可用的 JSON 接口服务。虽然没有使用 Gin 或 Echo 等框架,但理解底层机制有助于写出更可控的代码。
以上就是如何使用 Golang 编写一个 JSON 接口服务器_Golang RESTful API 实战演练的详细内容,更多请关注其它相关文章!
# 如何在
# 贵州线上营销推广平台
# 营口推广网站建设企业
# SEO教程视频制作模板
# 延边州seo矩阵
# 搜狗网站优化案例
# 鞍山seo优化厂家
# 廊坊专注网站建设
# 益阳专业seo优化企业
# 西盟小说网站建设
# 摄影网站建设软件
# 第三方
# 解决问题
# 不存在
# 中文网
# 相关文章
# js
# 资源管理
# 如何使用
# 新和
# 加载
# 标准库
# restful api
# 路由
# ai
# curl
# usb
# 端口
# app
# golang
# go
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Pyrogram与g4f集成:异步编程实践与常见错误解决
J*aScript中向JSON对象添加新属性的正确姿势
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
DLsite中文平台入口 DLsite官网内容在线查看
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
Composer如何在生产环境安全地执行composer update
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
AO3最新官网入口公告_2025AO3镜像站实时查询方法
python3时间如何用calendar输出?
React中useState与局部变量:理解组件状态管理与渲染机制
PySpark中从现有列右侧提取可变长度字符创建新列的教程
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
网易大神账号申诉需要多久_网易大神账号申诉流程说明
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
steam官方入口大全 steam账号注册及操作指南
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
Python多版本共存与虚拟环境管理深度指南
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
AO3官方可用镜像 Archive of Our Own网页版最新入口
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
c++ 获取系统当前时间 c++时间戳获取方法
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
Go RPC HTTP服务正确实现与常见陷阱解析
千牛数据看板网页版_千牛数据看板网页版访问方法
微信聊天记录怎么加密_微信聊天记录加密方法
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
随机参数递归函数的基准调用次数与时间复杂度探究
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
UC浏览器网页版登录入口官网 电脑版网址入口
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
如何将HTML表格多行数据保存到Google Sheets
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
深入理解J*aScript Promise异步执行与微任务队列
C++如何生成随机数_C++ random库使用方法与范围设置
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
《马克思佩恩3》早期版本曝光 UI设计曾多次调整!
React Hooks最佳实践:动态组件状态管理的组件化方案


2025-11-16
浏览次数:次
返回列表