首页 > 后端开发 > Golang > 正文

如何使用 Golang 编写一个 JSON 接口服务器_Golang RESTful API 实战演练

P粉602998670
发布: 2025-11-16 16:00:10
原创
331人浏览过
答案:使用Golang标准库构建RESTful API,实现用户管理的增删改查功能。通过net/http处理路由与请求,encoding/json解析数据,sync.Mutex保障并发安全,以map模拟存储,创建、读取、更新和删除用户,并用curl测试接口,展示轻量高效的JSON服务实现过程。

如何使用 golang 编写一个 json 接口服务器_golang restful api 实战演练

构建一个 JSON 接口服务器是 Golang 的常见应用场景。它轻量、高效,非常适合编写 RESTful API。下面通过一个简单的实战示例,带你一步步实现一个支持增删改查(CRUD)的用户管理接口。

初始化项目结构

创建项目目录并初始化模块:

mkdir go-rest-api
cd go-rest-api
go mod init go-rest-api

我们不依赖第三方框架,仅使用标准库 net/http 和 encoding/json,保持简洁。

定义数据模型和存储

创建一个 User 结构体,并使用 map 模拟内存存储:

立即学习go语言免费学习笔记(深入)”;

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 签名。

获取所有用户

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online
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.HandleFunc("/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 实战演练的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号