“誒,你這前後端開發環境怎麼搭建這麼快?”
“用了 Devbox 啊。”
“不是吧,你怎麼在 Cursor 裡連線開發環境的資料庫,這些都配好了?”
“對啊,一鍵搞定。”
“開玩笑吧?這得配置半天環境吧?”
“不,因為 Devbox 已經幫我們把所有開發環境都預配置好了,直接寫程式碼就行。”
這不是科幻電影的對白,而是真實存在的 Sealos Devbox 的功能。
今天我就給大家展示一下如何用最簡單的方式,實現開發環境與資料庫的無縫協作。
如果你不知道啥是 Devbox,可以看我們之前的文章:Sealos Devbox 使用教程:使用 Cursor 開發一個高仿蘋果官網
Sealos 資料庫介紹
Sealos 資料庫是一個強大且靈活的資料庫管理平臺,允許使用者在 Sealos 上視覺化地管理和使用各種資料庫。並且還提供了一整套高效的工具和機制,使資料庫的管理、擴充套件、監控和故障恢復更加便捷和自動化,適合從開發到生產的各類場景。
你只需要點點滑鼠,就可以建立各種資料庫,而且還是高可用的,你說氣人不氣人。
Sealos 資料庫支援豐富的資料庫管理系統 (DBMS),包括 MySQL、PostgreSQL、Redis、MongoDB,此外還支援訊息佇列 (如 Kafka) 和向量資料庫等,滿足了使用者多種業務場景的需求。
除此之外,Sealos 資料庫還支援自動故障恢復、靈活的資料備份與恢復機制、資料遷移等等各種特性,這裡我就不一一列舉了,感興趣的可以看 Sealos 官方文件。
建立資料庫
首先,我們需要建立一個資料庫。瀏覽器進入 Sealos 桌面,然後開啟【資料庫】App。
點選【新建資料庫】按鈕,進入資料庫配置介面。在這裡,你可以根據實際需求進行以下配置:
- 選擇資料庫型別 (本例中我們選擇 MySQL)
- 指定資料庫版本
- 配置計算資源 (CPU 和記憶體)
- 設定副本數量以實現高可用
- 分配磁碟空間大小
- 為資料庫命名
整個過程非常直觀,只需要按照介面提示一步步操作即可。
選擇好配置後,點選【部署】按鈕,資料庫就會開始建立。等到資料庫狀態變為執行中以後,點選左邊的小眼睛圖示,即可看到資料庫的連線資訊。
點選【連線】按鈕,進入資料庫的終端介面。
在終端介面輸入以下命令建立測試資料庫。
CREATE DATABASE testdb;
這時候,基本的資料庫配置就搞定啦。接下來開始建立開發環境。
建立 Devbox 開發環境
現在我們要建立一個 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
使用 GORM 連線 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
檔案,用於定義使用者相關的增刪改查操作。
這些操作包括:
- 建立新使用者
- 根據 ID 查詢使用者
- 更新使用者資訊
- 刪除使用者
下面是具體的實現程式碼:
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 還可以繼續完善和擴充套件,比如:
1. 新增資料驗證
我們可以在建立和更新使用者時新增資料驗證邏輯,比如:
- 驗證郵箱格式是否正確
- 檢查使用者名稱長度是否合適
- 確保必填欄位不為空
2. 介面化
將資料庫操作封裝成 RESTful API:
- 實現 HTTP 介面
- 新增介面認證
- 實現介面版本控制
你可以繼續使用 Cursor 的 AI 能力來實現這些功能,透過自然語言描述我們想要實現的功能,它就能幫我們生成相應的程式碼。
比如,我們可以這樣描述:“幫我實現一個使用者資料的批次匯入功能,包含事務處理和錯誤回滾機制。”
Cursor 就會根據我們的描述,生成相應的程式碼實現。
總結
在傳統開發中,連線開發環境的資料庫就像是穿越千山萬水去約會 - 要配 IP、調防火牆、改配置。但在 Sealos 中,Cursor 和資料庫就像住在隔壁的青梅竹馬,想約就約,連個電話都不用打。這種開發體驗,不就是我們每個開發者心中的 “理想型” 嗎?
有了這對神仙搭檔,你就可以把更多精力放在實現產品創意上,而不是被繁瑣的環境配置耗盡耐心。