答案:使用Golang标准库net/http和encoding/json可实现简易JSON API。定义User结构体并模拟数据存储,通过http.HandleFunc注册路由,分别处理GET /users获取用户列表、GET /users/{id}获取单个用户、POST /users创建用户等请求,设置正确响应头、状态码并进行JSON序列化与反序列化,即可完成基础CRUD功能。
用Golang实现一个简单的JSON API并不复杂,核心是使用标准库中的net/http处理HTTP请求,配合encoding/json进行数据序列化。下面通过一个用户管理的接口示例,展示如何设计和实现一个基础的JSON API。
假设我们要提供一个用户信息的增删查改(CRUD)接口,先定义一个User结构体:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
结构体字段使用json:标签,确保在JSON输出时使用小写字段名。
使用切片模拟存储,注册几个路由处理函数:
var users = []User{
{ID: 1, Name: "Alice", Age: 25},
{ID: 2, Name: "Bob", Age: 30},
}
func main() {
http.HandleFunc("/users", getUsers)
http.HandleFunc("/users/", getUser)
log.Println("Server starting on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
getUsers 处理 GET /users 请求,返回所有用户的JSON数组:
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
设置响应头为JSON类型,然后直接编码输出。
getUser 处理 GET /users/1 这类请求,提取ID并查找用户:
func getUser(w http.ResponseWriter, r *http.Request) {
idStr := strings.TrimPrefix(r.URL.Path, "/users/")
id, err := strconv.Atoi(idStr)
if err != nil || id <= 0 {
http.Error(w, "Invalid user ID", http.StatusBadRequest)
return
}
for _, u := range users {
if u.ID == id {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(u)
return
}
}
http.Error(w, "User not found", http.StatusNotFound)
}
通过strings.TrimPrefix提取路径中的ID,转换为整数后遍历查找。找到则返回JSON,否则返回404错误。
支持创建用户,处理POST请求:
func createUser(w http.ResponseWriter, r *http.Request) {
var newUser User
if err := json.NewDecoder(r.Body).Decode(&newUser); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
// 简单生成ID
if len(users) > 0 {
newUser.ID = users[len(users)-1].ID + 1
} else {
newUser.ID = 1
}
users = append(users, newUser)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.Status
Created)
json.NewEncoder(w).Encode(newUser)
}
读取请求体中的JSON数据,反序列化到结构体,分配ID后加入列表,并返回201状态码。
基本上就这些。通过组合http.HandleFunc、结构体和json包,就能快速搭建出可用的JSON API。虽然没有用到第三方框架(如Gin),但标准库已足够应对简单场景。注意处理错误、设置正确的内容类型和状态码,API会更健壮。
# js
# json
# go
# golang
# 编码
# app
# ai
# 路由
# 状态码
# json数组
# 标准库
# gin
# 结构体
# 数据结构
# 接口
# 切片
# http
# 序列化
# 用户列表
# 几个
# 就能
# 遍历
# 这类
# 提供一个
# 转换为
# 到第
相关文章:
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站之星代理费用多少?最新价格详情介绍
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
青浦网站制作公司有哪些,苹果官网发货地是哪里?
利用JavaScript实现拖拽改变元素大小
建站之星后台密码如何安全设置与找回?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
小型网站制作HTML,*游戏网站怎么搭建?
建站主机选择指南:服务器配置与SEO优化实战技巧
PHP 500报错的快速解决方法
用v-html解决Vue.js渲染中html标签不被解析的问题
香港服务器选型指南:免备案配置与高效建站方案解析
红河网站制作公司,红河事业单位身份证如何上传?
魔方云NAT建站如何实现端口转发?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
广州营销型建站服务商推荐:技术优势与SEO优化解析
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
定制建站模板如何实现SEO优化与智能系统配置?18字教程
建站之星如何快速更换网站模板?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何通过多用户协作模板快速搭建高效企业网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
javascript中的try catch异常捕获机制用法分析
网站app免费制作软件,能免费看各大网站视频的手机app?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
网站微信制作软件,如何制作微信链接?
如何高效完成独享虚拟主机建站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何选择服务器才能高效搭建专属网站?
建站之星如何优化SEO以实现高效排名?
大连网站设计制作招聘信息,大连投诉网站有哪些?
网站网页制作专业公司,怎样制作自己的网页?
如何快速搭建高效香港服务器网站?
如何用景安虚拟主机手机版绑定域名建站?
名字制作网站免费,所有小说网站的名字?
音响网站制作视频教程,隆霸音响官方网站?
专业公司网站制作公司,用什么语言做企业网站比较好?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在阿里云香港服务器快速搭建网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
小程序网站制作需要准备什么资料,如何制作小程序?
C++如何编写函数模板?(泛型编程入门)
如何零成本快速生成个人自助网站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
建站之星微信建站一键生成小程序+多端营销系统
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
建站之星好吗?新手能否轻松上手建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。