新闻中心

如何在Golang中实现基础的CRUD操作_Golang CRUD操作实战

2025-11-17
浏览次数:
返回列表
答案:本文通过Golang与MySQL实现用户管理的CRUD操作,涵盖环境搭建、数据模型定义、数据库连接、增删改查接口编写及路由注册,使用net/http和gorilla/mux构建RESTful API,最后启动服务并建议生产环境优化。

如何在golang中实现基础的crud操作_golang crud操作实战

在Go语言中实现基础的CRUD(创建、读取、更新、删除)操作是开发后端服务的核心技能之一。本文将通过一个简单的用户管理示例,使用Golang + MySQL来演示完整的CRUD流程,帮助你快速上手实战开发。

环境准备与依赖安装

开始前,确保你已安装Go和MySQL数据库。然后创建项目目录并初始化模块:

mkdir go-crud-example && cd go-crud-example
go mod init go-crud-example

接着安装MySQL驱动:

go get -u github.com/go-sql-driver/mysql

这个驱动允许Go程序连接和操作MySQL数据库。

定义数据模型与数据库连接

创建一个User结构体来映射数据库表字段:

type User struct {
  ID   int     'json:"id"'
  Name string 'json:"name"'
  Email string 'json:"email"'
}

然后编写数据库连接函数:

func ConnectDB() *sql.DB {
  db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/testdb")
  if err != nil {
    log.Fatal(err)
  }
  if err := db.Ping(); err != nil {
    log.Fatal(err)
  }
  return db
}

确保你的MySQL中已创建testdb数据库,并建好users表:

Zyro AI Background Remover Zyro AI Background Remover

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

Zyro AI Background Remover 145 查看详情 Zyro AI Background Remover CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);

实现CRUD接口逻辑

接下来为每个操作编写处理函数。

Create(创建) func createUser(w http.ResponseWriter, r *http.Request) {
  var user User
  if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
    http.Error(w, "Invalid request payload", http.StatusBadRequest)
    return
  }

  db := ConnectDB()
  defer db.Close()

  stmt, _ := db.Prepare("INSERT INTO users(name, email) VALUES(?, ?)")
  result, _ := stmt.Exec(user.Name, user.Email)
  id, _ := result.LastInsertId()

  user.ID = int(id)
  w.Header().Set("Content-Type", "application/json")
  json.NewEncoder(w).Encode(user)
}
Read(读取) func getUsers(w http.ResponseWriter, r *http.Request) {
  db := ConnectDB()
  defer db.Close()

  rows, _ := db.Query("SELECT id, name, email FROM users")
  defer rows.Close()

  var users []User
  for rows.Next() {
    var u User
    rows.Scan(&u.ID, &u.Name, &u.Email)
    users = append(users, u)
  }

  w.Header().Set("Content-Type", "application/json")
  json.NewEncoder(w).Encode(users)
}
Update(更新) func updateUser(w http.ResponseWriter, r *http.Request) {
  vars := mux.Vars(r)
  id := vars["id"]

  var user User
  json.NewDecoder(r.Body).Decode(&user)

  db := ConnectDB()
  defer db.Close()

  stmt, _ := db.Prepare("UPDATE users SET name=?, email=? WHERE id=?")
  stmt.Exec(user.Name, user.Email, id)

  w.WriteHeader(http.StatusOK)
}
Delete(删除) func deleteUser(w http.ResponseWriter, r *http.Request) {
  vars := mux.Vars(r)
  id := vars["id"]

  db := ConnectDB()
  defer db.Close()

  stmt, _ := db.Prepare("DELETE FROM users WHERE id=?")
  stmt.Exec(id)

  w.WriteHeader(http.StatusNoContent)
}

注册路由并启动服务

使用gorilla/mux作为路由器:

go get -u github.com/gorilla/mux

在main函数中注册路由:

func main() {
  r := mux.NewRouter()

  r.HandleFunc("/users", getUsers).Methods("GET")
  r.HandleFunc("/users", createUser).Methods("POST")
  r.HandleFunc("/users/{id}", updateUser).Methods("PUT")
  r.HandleFunc("/users/{id}", deleteUser).Methods("DELETE")

  fmt.Println("Server running on :8080")
  http.ListenAndServe(":8080", r)
}

运行程序后,可通过curl或Postman测试各个接口。

基本上就这些。这套结构清晰、代码简洁的实现方式适合学习和小型项目起步。注意生产环境中需加入错误处理、SQL注入防护、连接池配置和中间件日志等机制。

以上就是如何在Golang中实现基础的CRUD操作_Golang CRUD操作实战的详细内容,更多请关注其它相关文章!


# 相关文章  # 平房网站建设电话  # 网站推广的营销手段  # 个人网站建设网站运营  # 优化网站访问速度  # 长宁搜索关键词排名简单吗  # 视频号本地推广营销怎么做  # 丰台区互动网站建设  # seo绩效方案  # 甘肃seo技巧平台  # 静安seo选哪家  # 创建一个  # 可通过  # 这套  # 解决问题  # 中文网  # golang  # 复用  # 如何实现  # 如何使用  # 如何在  # 路由器  # app  # go语言  # github  # go  # json  # git  # js  # word  # mysql  # crud操作 


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


相关推荐: 谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  如何在Promise链中有效终止错误处理后的执行  微信客户端如何收红包_微信客户端接收红包使用教程  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  优化Django表单:提交验证失败后保留用户输入  内存疯狂猛猛涨价:主板销量直接腰斩!  字由网在线版登录地址 字由网网页版安全入口  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  J*aScript中针对特定容器内图片动画的实现教程  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  Lar*el 递归关系中排除指定分支的教程  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  qq音乐在线播放入口_qq音乐电脑版登录链接  PHP中高效并行检查多链接状态的教程  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异  cad如何更改注释性对象的比例_cad注释性比例调整方法  不同用户不同价格! 索尼开启账户个性化定价测试  Golang如何使用const iota_Go iota常量计数器讲解  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  必由学网页版入口 必由学官方平台直接访问  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  Win11网速慢怎么解决 Win11网络设置优化解除限速  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  AO3网页版最新入口合集 Archive of Our Own在线访问指南  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  J*a应用程序首次运行自动创建文件与目录的最佳实践  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  在Go Martini框架中高效服务动态生成图像的实践指南  抖音创作助手登录入口_抖音创作辅助工具官网直达  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  解决Bootstrap卡片顶部边距导致背景图下移的问题  必由学登录入口 必由学官方网站在线访问链接  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  12306选座怎么选到临时改签座_12306改签选座策略与步骤  ArrayList与LinkedList操作复杂度详解:遍历与修改  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  C#中解析不规范的HTML为XML 常见的坑与解决办法  mc.js官网登录入口 mc.js官方登录入口最新版  快手官方唯一登录入口 谨防山寨钓鱼网站 

搜索