网站首页 > 技术教程 正文
上一节我们创建好了程序的目录。现在开始编写代码,先从程序入口main.go开始编写。
package main
import (
"xblog/models"
)
func main() {
models.InitDB()
}
package main 声明当前代码属于 main 包。main 包是 Go 程序的入口点,程序从 main 包的 main 函数开始执行。
import 语句用于导入其他包的代码。本示例中,导入 xblog/models。
- xblog/models 包定义了数据模型。
func main() 是 main 包的入口函数。程序从 main 函数开始执行。
- models.InitDB() 函数用于初始化数据库连接。
接下来编写InitDB函数,在models目录下新建db.go文件,代码:
package models
import (
"fmt"
"os"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func InitDB() {
// 从环境变量获取数据库连接信息
host := os.Getenv("DB_HOST")
port := os.Getenv("DB_PORT")
user := os.Getenv("DB_USER")
password := os.Getenv("DB_PASSWORD")
dbName := os.Getenv("DB_NAME")
// 连接数据库
dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
user,
password,
host,
port,
dbName,
)
db, err := gorm.Open(mysql.Open(dns), &gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true,
})
if err != nil {
fmt.Println("连接数据库失败,请检查参数:", err)
os.Exit(1)
}
err = db.AutoMigrate(&User{})
if err != nil {
fmt.Printf("数据库迁移失败:%v", err)
os.Exit(1)
}
DB = db
}
package models 声明当前代码属于 models 包。models 包通常用于定义数据模型。
这里我导入了接下来要用到的4个包:
- fmt 包:用于格式化输出
- os 包:用于操作环境变量
- gorm.io/driver/mysql 包:用于连接 MySQL 数据库,也被称为数据库驱动。
- gorm.io/gorm 包:用于操作数据库
var DB *gorm.DB 声明全局变量 DB,用于存储数据库连接。注意Go语言中变量的大小写决定了变量是否可以被导出。
InitDB()函数用于初始化数据库连接。
os.Getenv函数可以从环境变量中获取数据库的连接信息,包括数据库地址、端口、用户名、密码和数据库名。
环境变量根据你使用的操作系统的不同它的配置会有些许的区别,本项目中我使用的是Linux发行版是Ubuntu Jammy。环境变量配置如下:
打开用户家目录下的.bashrc文件添加如下内容:
export DB_HOST=x.x.x.x // 把x.x.x.x替换为运行MySQL的主机IP
export DB_PORT=3306
export DB_USER=user
export DB_PASSWORD=password
export DB_NAME=dbname
保存退出,在终端中执行:source ~/.bashrc环境变量就配置好了。
dns 构造MySQL连接的DSN(数据源名称)。它使用了之前从环境变量中获取到的值
接下来使用GORM尝试打开一个新的数据库连接。gorm.Open函数接受两个参数:一个是数据库驱动和DSN的组合,一个是GORM的配置对象。
上面代码中第1个if语句是检查连接数据库时是否返回错误。如果有错误,输出错误信息并退出程序。err = db.AutoMigrate(&User{})调用GORM的AutoMigrate函数尝试自动迁移User结构体所对应的表结构。第2个if语句判断如果有错误,输出错误信息并退出程序。
DB = db 如果数据库连接成功,并且数据迁移没有错误,则将db(数据库连接对象)赋值给全局变量DB。
在models目录下新建user.go文件,代码:
package models
import (
"gorm.io/gorm"
)
type User struct {
gorm.Model
Username string `gorm:"type:varchar(20);not null" json:"username"`
Password string `gorm:"type:varchar(256);not null" json:"password"`
Email string `gorm:"type:varchar(64);not null" json:"email"`
Role int `gorm:"type:int;DEFAULT:1" json:"role"`
}
type User struct 这段代码定义了用户模型User的结构。它继承了gorm.Model,这是GORM内置的基本模型,包含了ID, CreatedAt, UpdatedAt, DeletedAt等字段。Username, Password, Email, Role是用户表的额外字段,每个字段后的标签指定了数据库中字段的类型(如varchar和int)、大小限制和其他约束(比如not null)、以及对应的JSON属性名。
当我们完成上述代码之后你会发现IDE出现了几个错误提示,如下图:
这是因为还未初始化 Go 模块。在终端中输入go mod init xblog完成初始化。如下图:
提示还有2个错误,不能导入"gorm.io/driver/mysql","gorm.io/gorm"。这时可以使用go mod tidy 命令解决此问题。go mod tidy 命令用于整理 Go 模块的依赖关系。它可以自动添加、删除和更新依赖关系,以确保模块的依赖关系是最新且一致的。
好,接下来让我运行一下程序,在终端中输入go run main.go
好,程序成功运行,没有报错。让我们登陆数据库看一下。
由图可以看出,程序根据User模型成功创建了users表。
猜你喜欢
- 2024-10-22 7.Go语言编写个人博客 用户登录 go语言开发博客
- 2024-10-22 如何搭建WordPress个人博客网站 wordpress搭建个人博客教程
- 2024-10-22 修改ZBLOG后台地址如此重要 zblog主题修改
- 2024-10-22 如何搭建个人博客网站?角点科技教你搭建博客网站
- 2024-10-22 4. 使用Go语言编写个人博客 新增用户并使用CURL测试
- 2024-10-22 2. 使用Go语言编写个人博客 目录结构概述与创建
- 2024-10-22 个人独立博客还有存在的必要吗? 知名的独立博客
- 2024-10-22 作为一个程序员居然还没有自己的博客?
- 2024-10-22 Python自动化运维系列:Django搭建个人博客之前端篇
- 2024-10-22 0基础新手小白个人博客建站之三:网站源码上传、主机调试
你 发表评论:
欢迎- 最近发表
-
- 函数公式的7大潜规则,这次给你讲透了
- 数据逆向查找不止有vlookup,你该知道的三种逆向查询操作
- Vlookup函数怎么一次查找能返回多个结果?
- vlookup函数的嵌套你用过吗?一次可以引用3个表格的数据
- Vlookup函数的新用法,查询合并单元格,很多Excel高手都不知道
- 分明有数据,公式也没错,为什么vlookup还是会返回错误值
- 条件判断还在用if函数就out了,vlookup函数模糊查询一键完成
- EXCEL函数 VLOOKUP函数 HLOOKUP函数
- excel中vlookup函数的用法(excel中vlookup函数公式)
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)