“诶,你这前后端开发环境怎么搭建这么快?”
“用了 Devbox 啊。”
“不是吧,你怎么在 Cursor 里连接开发环境的数据库,这些都配好了?”
“对啊,一键搞定。”
“开玩笑吧?这得配置半天环境吧?”
“不,因为 Devbox 已经帮我们把所有开发环境都预配置好了,直接写代码就行。”
这不是科幻电影的对白,而是真实存在的 Sealos Devbox 的功能。
今天我就给大家展示一下如何用最简单的方式,实现开发环境与数据库的无缝协作。
如果你不知道啥是 Devbox,可以看我们之前的文章:Sealos Devbox 使用教程:使用 Cursor 开发一个高仿苹果官网
Sealos 数据库是一个强大且灵活的数据库管理平台,允许用户在 Sealos 上可视化地管理和使用各种数据库。并且还提供了一整套高效的工具和机制,使数据库的管理、扩展、监控和故障恢复更加便捷和自动化,适合从开发到生产的各类场景。
你只需要点点鼠标,就可以创建各种数据库,而且还是高可用的,你说气人不气人。
Sealos 数据库支持丰富的数据库管理系统 (DBMS),包括 MySQL、PostgreSQL、Redis、MongoDB,此外还支持消息队列 (如 Kafka) 和向量数据库等,满足了用户多种业务场景的需求。
除此之外,Sealos 数据库还支持自动故障恢复、灵活的数据备份与恢复机制、数据迁移等等各种特性,这里我就不一一列举了,感兴趣的可以看 Sealos 官方文档。
首先,我们需要创建一个数据库。浏览器进入 Sealos 桌面,然后打开【数据库】App。
点击【新建数据库】按钮,进入数据库配置界面。在这里,你可以根据实际需求进行以下配置:
整个过程非常直观,只需要按照界面提示一步步操作即可。
选择好配置后,点击【部署】按钮,数据库就会开始创建。等到数据库状态变为运行中以后,点击左边的小眼睛图标,即可看到数据库的连接信息。
点击【连接】按钮,进入数据库的终端界面。
在终端界面输入以下命令创建测试数据库。
CREATE DATABASE testdb;
这时候,基本的数据库配置就搞定啦。接下来开始创建开发环境。
现在我们要创建一个 Devbox 开发环境,并通过本地的 IDE 连接到这个开发环境。
在 Sealos 桌面打开 Devbox 应用,新建一个项目,选择 Go 语言作为运行环境,CPU 内存改成 1C2G 就够了,不够可以随时再加。
点击创建,几秒钟即可启动开发环境。
接下来在操作选项中点击 Cursor,将会自动打开本地的 Cursor 编程 IDE。
接着会提示安装 Devbox 插件,安装后即可自动连接开发环境。
是不是非常简单?直接省略了配置域名解析、申请 SSL 证书,配置网关等与开发无关的繁琐操作,爽!
现在我们需要初始化一个 Go 项目并安装相关依赖。在 Cursor 的终端中执行以下命令:
go mod init go-db-demo go mod tidy go get -u gorm.io/gorm go get -u gorm.io/driver/mysql
接下来我们会创建一个简单的 demo 来使用 GORM 这个 Go 语言的 ORM 框架来连接 MySQL 数据库。
整个项目的目录结构如下:
├── main.go ├── config/ │ └── config.go ├── models/ │ └── user.go ├── database/ │ └── database.go ├── repository/ │ └── user_repository.go └── go.mod
首先我们在 config
目录下创建一个 config.go
文件,配置数据库的连接信息,包括 MySQL 的用户名、密码、数据库名称、数据库地址、数据库端口等。
package config import ( "fmt" ) var ( DBUser = "root" DBPassword = "9w7zjt8f" DBName = "testdb" DBHost = "test1-db-mysql.ns-kc811077.svc" DBPort = "3306" ) func GetDSN() string { return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", DBUser, DBPassword, DBHost, DBPort, DBName) }
接下来在 database
目录下创建 database.go
文件,用于初始化数据库连接:
package database import ( "gorm.io/driver/mysql" "gorm.io/gorm" "go-db-demo/config" "log" ) var DB *gorm.DB func Connect() { dsn := config.GetDSN() var err error DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatalf("Failed to connect to database: %v", err) } log.Println("Database connected successfully!") }
现在我们在 models
目录下创建 user.go
文件,定义 User 模型:
package models import "gorm.io/gorm" type User struct { gorm.Model Name string `json:"name"` Email string `json:"email" gorm:"unique"` }
接下来我们需要实现一些基本的数据库操作功能。我们将在 models
目录下创建 user_operations.go
文件,用于定义用户相关的增删改查操作。
这些操作包括:
下面是具体的实现代码:
package repository import ( "go-db-demo/database" "go-db-demo/models" ) func CreateUser(user *models.User) error { return database.DB.Create(user).Error } func GetUserByID(id uint) (*models.User, error) { var user models.User err := database.DB.First(&user, id).Error return &user, err } func UpdateUser(user *models.User) error { return database.DB.Save(user).Error } func DeleteUser(id uint) error { return database.DB.Delete(&models.User{}, id).Error }
现在让我们在主程序中使用这些功能。在 main.go
文件中,我们将初始化数据库连接,并执行一些基本的 CRUD 操作来测试我们的实现:
package main import ( "fmt" "go-db-demo/database" "go-db-demo/models" "go-db-demo/repository" ) func main() { // 连接数据库 database.Connect() // 自动迁移数据库结构 database.DB.AutoMigrate(&models.User{}) // 创建用户 newUser := &models.User{Name: "John Doe", Email: "john@example.com"} if err := repository.CreateUser(newUser); err != nil { fmt.Println("Error creating user:", err) } else { fmt.Println("User created:", newUser) } // 查询用户 user, err := repository.GetUserByID(newUser.ID) if err != nil { fmt.Println("Error fetching user:", err) } else { fmt.Printf("Fetched user: %#v\n", user) } // 更新用户 user.Name = "John Updated" if err := repository.UpdateUser(user); err != nil { fmt.Println("Error updating user:", err) } else { fmt.Println("User updated:", user) } // 删除用户 if err := repository.DeleteUser(user.ID); err != nil { fmt.Println("Error deleting user:", err) } else { fmt.Println("User deleted successfully") } }
现在我们已经完成了基本的 CRUD 操作代码,我们来测试一下。
在 Cursor 的终端中执行以下命令:
go run main.go
现在你将看到程序对数据库的一系列操作结果,包括:
输出大致如下:
我们的 demo 还可以继续完善和扩展,比如:
我们可以在创建和更新用户时添加数据验证逻辑,比如:
将数据库操作封装成 RESTful API:
你可以继续使用 Cursor 的 AI 能力来实现这些功能,通过自然语言描述我们想要实现的功能,它就能帮我们生成相应的代码。
比如,我们可以这样描述:“帮我实现一个用户数据的批量导入功能,包含事务处理和错误回滚机制。”
Cursor 就会根据我们的描述,生成相应的代码实现。
在传统开发中,连接开发环境的数据库就像是穿越千山万水去约会 - 要配 IP、调防火墙、改配置。但在 Sealos 中,Cursor 和数据库就像住在隔壁的青梅竹马,想约就约,连个电话都不用打。这种开发体验,不就是我们每个开发者心中的 “理想型” 吗?
有了这对神仙搭档,你就可以把更多精力放在实现产品创意上,而不是被繁琐的环境配置耗尽耐心。