本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。
本文介紹基於Go ORM架構串連和使用Lindorm寬表引擎的方法。
操作步驟
在Go專案的go.mod檔案中添加GORM相關依賴。
require (
gorm.io/driver/mysql v1.5.1
gorm.io/gorm v1.25.4
)
配置串連參數。
dsn := "<user>:<password>@tcp(<lidnorm_mysql_url>:33060)/<database>"
參數說明
參數 | 說明 |
user | 如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。具體操作,請參見修改使用者密碼。 |
password |
lidnorm_mysql_url | Lindorm寬表引擎的MySQL相容地址。如何擷取,請參見查看串連地址。 重要 如果應用部署在ECS執行個體,建議您通過專用網路訪問Lindorm執行個體,可獲得更高的安全性和更低的網路延遲。 如果應用部署在本地,在通過公網串連Lindorm執行個體前,需在控制台開通公網地址。開通方式:在控制台選擇,在寬表引擎頁簽單擊開通公網地址。 通過專用網路訪問Lindorm執行個體,lidnorm_mysql_url請填寫MySQL相容地址對應的專用網路地址。通過公網訪問Lindorm執行個體,lidnorm_mysql_url請填寫MySQL相容地址對應的公網地址。
|
database | 需要串連的資料庫名稱。預設串連default資料庫。 |
建立串連,通過寬表SQL文法使用Lindorm寬表引擎。以建立表為例。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
session := db.Session(&gorm.Session{SkipDefaultTransaction: true})
err = session.Migrator().CreateTable(&Product{})
if err != nil {
panic(err)
}
完整樣本
完整範例程式碼如下:
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Product struct {
ID int64 `gorm:"primaryKey;autoIncrement:false"`
Code string `gorm:"type:varchar"`
Price float64
}
func main() {
dsn := "user:test@tcp(ld-uf6k8yqb741t3****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060)/default"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
session := db.Session(&gorm.Session{SkipDefaultTransaction: true})
err = session.Migrator().CreateTable(&Product{})
if err != nil {
panic(err)
}
tx := session.Debug().Create(&Product{ID: 1, Code: "D42", Price: 100.1})
err = tx.Error
if err != nil {
panic(err)
}
tx = session.Debug().Create(&Product{ID: 2, Code: "B41", Price: 105.5})
err = tx.Error
if err != nil {
panic(err)
}
var product1 Product
session.Debug().First(&product1, 1)
fmt.Println(product1)
var product2 Product
session.Debug().First(&product2, "code = ?", "B41")
fmt.Println(product2)
session.Debug().Model(&Product{}).Where("id = ?", 1).Update("price", 101.8)
product1 = Product{}
session.Debug().First(&product1, 1)
fmt.Println(product1)
session.Delete(&Product{}, 1)
product1 = Product{}
session.Debug().First(&product1, 1)
fmt.Println(product1)
}
上述代碼執行後將返回執行日誌,日誌中包含查詢結果。查詢結果如下:
{1 D42 100.1}
{2 B41 105.5}
{1 D42 101.8}
{0 0}