当前位置: 首页 > news >正文

做网站尽在美橙互联合肥关键词排名提升

做网站尽在美橙互联,合肥关键词排名提升,软件下载网站开发,深圳网站建设招标大家好,我是此林。 Golang 语言现在已经成为了编程的趋势,毕竟是大厂背书嘛,Google 研发的。 目前很多云原生项目都是基于 go 来编写的,比如: Kubernetes (K8s)​ 容器编排系统, Docker​ 容器化技术&…

大家好,我是此林。

Golang 语言现在已经成为了编程的趋势,毕竟是大厂背书嘛,Google 研发的。

目前很多云原生项目都是基于 go 来编写的,比如:

        Kubernetes (K8s)​ 容器编排系统,

        Docker​ 容器化技术,

        etcd​ 分布式键值存储(Kubernetes 的默认存储),

        Prometheus​ 监控 & 告警系统,

        Istio​ 服务网格(Service Mesh,用于流量管理、安全策略、可观测性)

​💡 Go 的优势​

✅ ​​编译速度快​​(比 C++/Java 快)
✅ ​​静态二进制文件​​(部署简单,无依赖)
✅ ​​原生并发支持​​(goroutine + channel)

那作为一个 Javaer,我们用熟练了 springboot,gin + grom 那一套东西,上手也可以说很快。今天来看一个案例:user 增删查改。

目录

1. Go 安装

2. 项目开始

2.1. 初始化配置

2.2. sql 设计

2.3. db.go 数据库配置

2.4. user.go 实体类设计

2.5. controller 设计

2.6 main.go 主程序

3. postman 接口测试


1. Go 安装

这个不多说,下载安装 + 配置环境变量,笔者用的是 1.23.8 稳定版。

安装完记得用 go env -w 配置下 mod 的国内代理,mod 相当于 Maven,是依赖管理工具。

和 java 不同,mod 是 go 语言自带的,无需另外安装。

 vscode 里配置插件,这里就不用笨重的 Goland 了。

2. 项目开始

2.1. 初始化配置

mkdir go-crud
cd go-crud
go mod init go-crud

然后创建下面的目录结构

go-crud/
├── main.go
├── models/
│   └── user.go
├── controllers/
│   └── user_controller.go
├── config/└── db.go

看样子,和 spring mvc 还有点像。

2.2. sql 设计

已经提前创建好了 user 表,四个字段:id,name,age,sex。

SQL自取。

create table users
(id   bigint unsigned auto_incrementprimary key,name longtext null,age  bigint   null,sex  bigint   null
);INSERT INTO users (name, age, sex) 
VALUES ('李四', 30, 1),('王五', 28, 0),('赵六', 22, 1);

2.3. db.go 数据库配置

package configimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)var DB *gorm.DBfunc ConnectDB() {dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic("数据库连接失败:" + err.Error())}DB = dbfmt.Println("数据库连接成功!")
}

有点陌生?别担心,多去浏览浏览菜鸟教程的 Go 基本语法就行。

1. fmt.Println():相当于 java 里的 System.out.println()

2. dsn := "...":这是go里定义局部变量的简化写法

当然也可以写成 var dsn = "...",这种定义可以作为全局或者局部变量。

或者 var dsn string = "..." 也可以,不写明类型go会自动类型推导。

2.4. user.go 实体类设计

package modelstype User struct {Id uint `json:"id" gorm:"primaryKey"`Name string `json:"name"`Age int `json:"age"`Sex int `json:"sex"`
}
func (User) TableName() string {return "user"  // 强制表名为 "user"(而不是默认的 "users")
}

在 Go 的结构体定义中,​`json:"xxx"`​ 和 ​`gorm:"xxx"`​ 这些是 ​​结构体标签(Struct Tags)​​,它们为字段提供额外的元信息(metadata),用于控制 JSON 序列化/反序列化、数据库映射等行为。

比如json标签:

`json:"id"`   // 指定该字段在JSON中的键名
`json:"-"`    // 忽略此字段(不参与JSON序列化)
`json:"name,omitempty"` // 如果字段为空值(0、""、nil等),JSON中省略此字段

详细来说,就是如下:

type User struct {Id   uint   `json:"id" gorm:"primaryKey"`  // JSON键名=id,数据库主键Name string `json:"name"`                  // JSON键名=nameAge  int    `json:"age"`                   // JSON键名=ageSex  int    `json:"sex"`                   // JSON键名=sex
}

2.5. controller 设计

package controllersimport ("go-crud/config""go-crud/models""github.com/gin-gonic/gin""net/http"
)// 创建用户
func CreateUser(c *gin.Context) {var user models.Userif err := c.ShouldBindJSON(&user); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}config.DB.Create(&user)c.JSON(http.StatusOK, user)
}// 查询所有用户
func GetUsers(c *gin.Context) {var users []models.Userconfig.DB.Find(&users)c.JSON(http.StatusOK, users)
}// 查询单个用户
func GetUserById(c *gin.Context) {var user models.Userid := c.Param("id")if err := config.DB.First(&user, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "用户未找到"})return}c.JSON(http.StatusOK, user)
}// 更新用户
func UpdateUser(c *gin.Context) {var user models.Userid := c.Param("id")if err := config.DB.First(&user, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "用户未找到"})return}var input models.Userif err := c.ShouldBindJSON(&input); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}user.Name = input.Nameuser.Age = input.Ageuser.Sex = input.Sexconfig.DB.Save(&user)c.JSON(http.StatusOK, user)
}// 删除用户
func DeleteUser(c *gin.Context) {var user models.Userid := c.Param("id")if err := config.DB.First(&user, id).Error; err != nil {c.JSON(http.StatusNotFound, gin.H{"error": "用户未找到"})return }config.DB.Delete(&user)c.JSON(http.StatusOK, gin.H{"message": "用户已删除"})
}

这里每个函数都要加 c *gin.Context,可以理解为请求request和响应response都在里边。当做规则,记住就好。 

id := c.Param("id") 就是获取请求中的id。

c.JSON(http.StatusOK, gin.H{"message": "用户已删除"}) 就是返回 json 响应,restful 规范。

 可以看到,使用了 gorm,大部分 sql 我们都不用手写。

当然也可以使用 config.DB = config.DB.Debug()  打印实际执行的SQL。在复杂查询时,也是可以自定义 SQL 的。

2.6 main.go 主程序

最后一步了!

package mainimport ("go-crud/config""go-crud/controllers""go-crud/models""github.com/gin-gonic/gin"
)func main() {// 连接数据库config.ConnectDB()// 自动迁移config.DB.AutoMigrate(&models.User{})// 设置路由r := gin.Default()r.POST("/users", controllers.CreateUser) // 创建用户r.GET("/users", controllers.GetUsers)     // 查询所有用户r.GET("/users/:id", controllers.GetUserById) // 查询单个用户r.PUT("/users/:id", controllers.UpdateUser) // 更新用户r.DELETE("/users/:id", controllers.DeleteUser) // 删除用户r.Run(":1234") // 启动服务
}

这里无非是先初始化数据库连接。

我们以前 springboot里,是把 mysql 连接信息写在 yml 里,然后 spring 把它封装为 Bean 吧?

Go 里稍微不同,要去显式调用。

然后后面就是配置路由了,路由集中管理了,和 springboot 注解配置的形式又有点不同。

最后 r.Run() 启动服务。

3. postman 接口测试

启动项目:

go run main.go

 1. 查询所有用户

 2. 删除用户

3. 更新用户

今天分享就到这里了,

我是此林,

关注我吧,带你看不一样的世界!

http://www.dtcms.com/a/610856.html

相关文章:

  • 将sqlite3的表转成excel表
  • 商城网站框架南京网站设计个人
  • 除了Joomla用什么做网站好wordpress中调整图片尺寸
  • 二手车做网站的目的姑苏营销型网站建设电话
  • 3. Qt深入 线程安全函数与可重入函数
  • 做打鱼网站犯法不商城系统的基本
  • 广州网站开发哪家公司好ui设计与网站建设
  • 硅基计划6.0 柒 JavaEE 浅谈JVMGC垃圾回收
  • Springboot集成OnlyOffice
  • 海口市做网站的公司郑州官方发布最新消息
  • VS2012能编译C语言吗 | 深入解析Visual Studio 2012对C语言的支持
  • 安顺网站开发网站建设兼职劳务协议书
  • LTE/NR上行控制信道PUCCH与UCI介绍
  • 有啥可以自己做网站的软件视频网站程序
  • 开源项目分享 : Gitee热榜项目 2025-11-14 日榜
  • 科技助老与智慧养老的国家级政策与地方实践探索
  • 在婚恋网站上做红娘怎么样wordpress淘宝客pid
  • 手机网站被自动跳转阳江赶集网
  • 芋道vue3 内网无法显示icon问题解决
  • 国内金融机构数据分类分级建设方案——实践路径、落地要点与平台选型建议
  • 汕头建站网站信息系统设计
  • 物理层信道编码与5G编码技术介绍
  • Python3 循环语句
  • 网站制作过程合理步骤是什么成年培训班有哪些
  • AI一周资讯 251108-251114
  • 如何解决 Linux 文件系统挂载失败的问题?
  • 网站是做流程图怎么向谷歌提交网站
  • 唐山做网站优化怎样理解网站建设与开发这门课
  • c++零基础通关教程第一课
  • 国产RISC-V MCU/SoC芯片推荐