新闻中心

Golang如何搭建简单的REST API服务

2025-11-17
浏览次数:
返回列表
答案:使用Golang标准库net/http可快速搭建REST API,定义User结构体和全局切片模拟数据,实现GET请求获取用户列表和单个用户,通过json.NewEncoder设置Content-Type为application/json并返回JSON数据;利用Gorilla Mux增强路由功能,支持路径参数提取和HTTP方法限制,添加POST处理函数createUser解析请求体中的JSON数据,生成新ID并追加到用户列表,返回状态码201及创建的用户信息,完整实现基础RESTful接口。

golang如何搭建简单的rest api服务

用Golang搭建一个简单的REST API服务并不复杂,Go语言标准库已经提供了足够的工具来快速实现。下面是一个清晰、实用的实现方式,适合初学者上手。

使用标准库 net/http 创建基础服务

Go 的 net/http 包可以轻松启动HTTP服务并处理路由和请求。以下是一个最简REST服务示例:

package main

import (
    "encoding/json"
    "log"
    "net/http"
)

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

var users = []User{
    {ID: 1, Name: "Alice"},
    {ID: 2, Name: "Bob"},
}

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) {
    id := r.URL.Path[len("/users/"):]

    for _, u := range users {
        if strconv.Itoa(u.ID) == id {
            w.Header().Set("Content-Type", "application/json")
            json.NewEncoder(w).Encode(u)
            return
        }
    }
    http.Error(w, "User not found", http.StatusNotFound)
}

func main() {
    http.HandleFunc("/users", getUsers)
    http.HandleFunc("/users/", getUser)
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

说明:

  • 定义了一个 User 结构体,并初始化一个全局切片作为“数据存储”
  • /users 返回所有用户列表
  • /users/{id} 根据路径提取ID返回单个用户
  • 设置响应头为 JSON 格式,使用 json.NewEncoder 编码输出

使用 Gorilla Mux 增强路由功能

标准库的路由能力有限,Gorilla Mux 是一个流行的第三方路由器,支持命名参数、方法限制等。

安装:

go get github.com/gorilla/mux

改写路由部分:

Zyro AI Background Remover Zyro AI Background Remover

Zyro推出的AI图片背景移除工具

Zyro AI Background Remover 145 查看详情 Zyro AI Background Remover
import "github.com/gorilla/mux"

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/users", getUsers).Methods("GET")
    r.HandleFunc("/users/{id}", getUser).Methods("GET")

    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", r))
}

在 getUser 中获取参数:

vars := mux.Vars(r)
id := vars["id"]

这种方式更清晰、安全,也更容易扩展POST、PUT、DELETE等操作。

添加 POST 请求处理示例

实现创建用户功能:

func createUser(w http.ResponseWriter, r *http.Request) {
    var user User
    json.NewDecoder(r.Body).Decode(&user)
    user.ID = len(users) + 1
    users = append(users, user)

    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(user)
}

注册路由:

r.HandleFunc("/users", createUser).Methods("POST")

这样就可以接收JSON格式的用户数据并添加到列表中。

基本上就这些。用Go写REST API可以从标准库开始,逐步引入Mux等工具提升可维护性。不复杂但容易忽略细节,比如设置Header、正确返回状态码。

以上就是Golang如何搭建简单的REST API服务的详细内容,更多请关注其它相关文章!


# 营销人员推广伪冒行为  # 路由功能  # 如何在  # 相关文章  # 中文网  # 解决问题  # 第三方  # 重庆seo外包服务推广  # 如何建立网站站点优化  # 资源管理  # 鲍鱼tv下载SEO查询  # 北京网站推广威心hfqjwl下拉  # 聊城济南网站建设优化  # 网站推广的盈利  # app营销推广怎么写  # seo公司那家好  # 茶叶市场推广营销方案  # 路由器  # git  # json  # go  # github  # golang  # go语言  # 编码  # app  # js  # 工具  # ai  # 路由  # rest a  # 是一个  # 加载  # 用户列表 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Mac怎么查看崩溃日志_Mac控制台错误报告分析  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  邮政快递单号查询入口 邮政快递物流信息在线查询入口  Archive of Our Own官网直达 AO3最新可用地址一览  Python中高效访问嵌套字典与列表中的键值对  Django通过AJAX异步上传图片并保存至模型的完整指南  必由学官方网站入口 必由学学生教师共用登录通道  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  Go Martini框架:动态服务解码后的图片内容  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  Golang如何优雅处理error_Golang error处理最佳实践总结  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  拼多多赚钱渠道_拼多多收益来源  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  解决J*aScript中重复选择项的确认对话框显示问题  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  深入理解J*aScript中的B样条曲线与节点向量生成  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  在React函数组件中利用原生HTML5进行邮箱地址验证  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  composer的"require-dev"部分是用来做什么的?  微博网页版直接访问 微博网页版账号管理快速入口  天眼查企业查询官网入口 天眼查官方网页版查询  Angular响应式表单:实现提交后表单及按钮的禁用与只读化  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  steam官方入口大全 steam账号注册及操作指南  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  BetterDiscord插件中安全更新用户简介的实践指南  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  知音漫客正版漫画平台_知音漫客官网账号登录  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  微信网页版官方快速登录入口 微信网页版网页版账号直达  黑猫投诉统一入口官网 消费者权益保护投诉平台  必由学官方平台入口 必由学在线课堂登录地址  蛙漫移动版在线看 蛙漫手机浏览器直达入口  将HTML Canvas内容转换为可上传的图像文件(File对象)  高德地图公交到站提醒失败如何解决 高德提醒权限设置  AO3同人作品网入口 AO3搜索引擎官网永久地址  小米Civi 4录制视频过暗_小米Civi 4亮度优化  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染 

搜索