当前位置:实例文章 » 其他实例» [文章]go-zero学习 第四章 数据库操作(MySQL)

go-zero学习 第四章 数据库操作(MySQL)

发布人:shili8 发布时间:2025-01-24 12:39 阅读次数:0

**Go-zero 学习第四章: 数据库操作 (MySQL)**在前三章中,我们已经了解了 Go-zero 的基本框架结构、路由定义以及服务注册。然而,任何一个完整的应用都离不开数据存储。在这一章,我们将重点介绍如何使用 MySQL 作为我们的数据库。

###1. 安装依赖首先,我们需要安装 `github.com/go-sql-driver/mysql` 这个包,它是 Go-zero 支持 MySQL 的驱动器。我们可以通过以下命令来安装:

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


###2. 配置数据库连接在我们的项目中,我们需要配置一个 `mysql` 模块来连接 MySQL 数据库。在 `main.go` 文件中添加如下代码:

gopackage mainimport (
"github.com/go-zero/core/logx"
"github.com/go-zero/zrpc/config"
"myapp/conf"

_ "github.com/go-sql-driver/mysql"
)

func init() {
	logx.Load(&conf.LogConf)
}

func main() {
	c, err := config.Load()
	if err != nil {
	logx.Panicf("load config failed: %v", err)
}
	svr := NewServer(c)
	svr.Start()
}


在 `conf` 包中,我们需要定义一个 `mysql` 模块来配置数据库连接:

gopackage confimport (
"github.com/go-zero/zrpc/config"
)

type LogConf struct {
Level string `mapstructure:"level"`
}

func Load() (*config.Config, error) {
	c := config.NewConfig()
	if err := c.Load("conf/app.toml"); err != nil {
	return nil, err}
	return c, nil}


在 `conf/app.toml` 文件中,我们需要配置 MySQL 的连接信息:

toml[mysql]
host = "localhost"
port =3306user = "root"
password = ""
database = "myapp"


###3. 定义数据库模型在我们的项目中,我们需要定义一个 `User` 模型来表示用户数据。我们可以使用 Go-zero 提供的 `Model` 接口来定义:

gopackage modelimport (
"github.com/go-zero/zrpc/model"
)

type User struct {
	model.Model	ID uint `json:"id" database:"id"`
	Name string `json:"name" database:"name"`
Email string `json:"email" database:"email"`
Password string `json:"password" database:"password"`
}


###4. 实现数据库操作在我们的项目中,我们需要实现一些基本的数据库操作,如插入、查询、更新和删除。我们可以使用 Go-zero 提供的 `DB` 接口来实现:

gopackage modelimport (
"github.com/go-zero/zrpc/db"
)

func NewUserModel(c *db.DB) *User {
	return &User{
	Model: model.Model{DB: c},
}
}

func (m *User) Insert(user User) error {
_, err := m.DB.Exec("INSERT INTO users SET id = ?, name = ?, email = ?, password = ?", user.ID, user.Name, user.Email, user.Password)
	return err}

func (m *User) Find(id uint) (*User, error) {
	var user User	err := m.DB.QueryRow("SELECT id, name, email, password FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name, &user.Email, &user.Password)
	return &user, err}

func (m *User) Update(user User) error {
_, err := m.DB.Exec("UPDATE users SET name = ?, email = ?, password = ? WHERE id = ?", user.Name, user.Email, user.Password, user.ID)
	return err}

func (m *User) Delete(id uint) error {
_, err := m.DB.Exec("DELETE FROM users WHERE id = ?", id)
	return err}


###5. 测试数据库操作在我们的项目中,我们需要测试一下我们实现的数据库操作。我们可以使用 Go-zero 提供的 `Test` 接口来测试:

gopackage modelimport (
"testing"

"github.com/go-zero/zrpc/test"
)

func TestUserModel(t *testing.T) {
	c, err := db.NewMySQL("conf/app.toml")
	if err != nil {
	t.Fatal(err)
}
	m := NewUserModel(c)
	user := User{ID:1, Name: "John", Email: "john@example.com", Password: "password"}
	err = m.Insert(user)
	if err != nil {
	t.Fatal(err)
}
	foundUser, err := m.Find(1)
	if err != nil {
	t.Fatal(err)
}
	if foundUser.ID !=1 || foundUser.Name != "John" || foundUser.Email != "john@example.com" || foundUser.Password != "password" {
	t.Errorf("expected user {id: %d, name: %s, email: %s, password: %s}, but got {id: %d, name: %s, email: %s, password: %s}",1, "John", "john@example.com", "password", foundUser.ID, foundUser.Name, foundUser.Email, foundUser.Password)
}
	err = m.Update(user)
	if err != nil {
	t.Fatal(err)
}
	foundUser, err = m.Find(1)
	if err != nil {
	t.Fatal(err)
}
	if foundUser.ID !=1 || foundUser.Name != "John" || foundUser.Email != "john@example.com" || foundUser.Password != "password" {
	t.Errorf("expected user {id: %d, name: %s, email: %s, password: %s}, but got {id: %d, name: %s, email: %s, password: %s}",1, "John", "john@example.com", "password", foundUser.ID, foundUser.Name, foundUser.Email, foundUser.Password)
}
	err = m.Delete(1)
	if err != nil {
	t.Fatal(err)
}
	foundUser, err = m.Find(1)
	if err == nil {
	t.Errorf("expected error, but got none")
}
}


###6. 总结在这一章,我们学习了如何使用 MySQL 作为我们的数据库。我们了解了如何配置数据库连接、定义数据库模型和实现数据库操作。最后,我们测试了这些功能以确保它们正常工作。

通过阅读本文,希望你已经掌握了 Go-zero 使用 MySQL 的基本知识。如果你有任何问题或疑问,请随时在评论区留言。

其他信息

其他资源

Top