在 go 应用程序中集成 google cloud sql 数据库涉及使用流行的 go 框架,例如 gORM 和 x/sql,与 cloud sql 数据库建立连接。这些框架提供便捷的方法来管理数据库连接和执行 crud 操作。通过使用 gorm 或 x/sql 与 cloud sql 建立连接,可以轻松访问和管理云中的关系数据库。

Go框架中集成Google Cloud SQL数据库
简介
在Go应用程序中集成Google Cloud SQL数据库是访问和管理云中关系数据库的必要步骤。本文将向你展示如何使用流行的Go框架,例如GORM和x/sql,与Cloud SQL数据库建立连接。
立即学习“go语言免费学习笔记(深入)”;
先决条件
- 安装Go并配置Go路径
- 创建Cloud SQL实例
- 为Cloud SQL创建服务账号
使用GORM
GORM是一个流行的ORM,它提供了一个与数据库交互的简单、直观的接口。要使用GORM与Cloud SQL连接,请执行以下步骤:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 
import(
     "context"
     "fmt"
     "io"
 
     "Github.com/jinzhu/gorm"
     _ "github.com/jinzhu/gorm/dialects/Mysql"
 )
 
 funcconnectToCloudSQL(w io.Writer, dbuser, dbPwd, dbName string) (*gorm.DB, error) {
     
     
     
     
     var(
         dbUser    = os.Getenv("DB_USER")      
         dbPwd     = os.Getenv("DB_PASS")      
         dbName     = os.Getenv("DB_NAME")      
         dbPort     = os.Getenv("DB_PORT")      
         dbTCPHost = os.Getenv("INSTANCE_HOST") 
     )
 
     dbURI := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true",
         dbUser, dbPwd, dbTCPHost, dbPort, dbName)
 
     
     dbPool, err := gorm.Open("mysql", dbURI)
     iferr != nil{
         returnnil, fmt.Errorf("gorm.Open: %v", err)
     }
 
     configureDB(dbPool)
 
     _, err = createTable(dbPool, w)
     iferr != nil{
         returnnil, fmt.Errorf("createTable: %v", err)
     }
 
     returndbPool, nil
 }
 | 
 
使用x/sql
x/sql是Go标准库中用于直接与数据库交互的包。使用x/sql与Cloud SQL建立连接,请执行以下步骤:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 
import(
     "context"
     "database/sql"
     "fmt"
     "io"
 
     _ "github.com/go-sql-driver/mysql"
 )
 
 funcconnectWithXSQL(w io.Writer, dbUser, dbPwd, dbName string) (*sql.DB, error) {
     var(
         dbUser    = os.Getenv("DB_USER")      
         dbPwd     = os.Getenv("DB_PASS")      
         dbName     = os.Getenv("DB_NAME")      
         dbPort     = os.Getenv("DB_PORT")      
         dbTCPHost = os.Getenv("INSTANCE_HOST") 
     )
 
     dbURI := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true",
         dbUser, dbPwd, dbTCPHost, dbPort, dbName)
 
     
     dbPool, err := sql.Open("mysql", dbURI)
     iferr != nil{
         returnnil, fmt.Errorf("sql.Open: %v", err)
     }
 
     configureDB(dbPool, w)
 
     _, err = createTable(dbPool, w)
     iferr != nil{
         returnnil, fmt.Errorf("createTable: %v", err)
     }
 
     returndbPool, nil
 }
 | 
 
实战案例
以下是一个使用GORM与Cloud SQL数据库进行交互的实际示例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 
funcmain() {
     ctx := context.Background()
     dbPool, err := connectToCloudSQL(os.Stdout, "user", "password", "test")
     iferr != nil{
         log.Fatal(err)
     }
     deferdbPool.Close()
 
     typeUser struct{
         ID   int`gorm:"primary_key"`
         Name string
     }
 
     
     dbPool.AutoMigrate(&User{})
 
     
     user := User{Name: "John"}
     dbPool.Create(&user)
 
     
     varretrievedUser User
     dbPool.First(&retrievedUser, user.ID)
     fmt.Fprintf(os.Stdout, "Retrieved user: %+v\n", retrievedUser)
 
     
     dbPool.Model(&retrievedUser).Update("Name", "Jane")
 
     
     dbPool.Delete(&retrievedUser)
 }
 |