在 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"
)
func connectToCloudSQL(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)
if err != nil {
return nil , fmt.Errorf( "gorm.Open: %v" , err)
}
configureDB(dbPool)
_, err = createTable(dbPool, w)
if err != nil {
return nil , fmt.Errorf( "createTable: %v" , err)
}
return dbPool, 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"
)
func connectWithXSQL(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)
if err != nil {
return nil , fmt.Errorf( "sql.Open: %v" , err)
}
configureDB(dbPool, w)
_, err = createTable(dbPool, w)
if err != nil {
return nil , fmt.Errorf( "createTable: %v" , err)
}
return dbPool, 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
|
func main() {
ctx := context.Background()
dbPool, err := connectToCloudSQL(os.Stdout, "user" , "password" , "test" )
if err != nil {
log.Fatal(err)
}
defer dbPool. Close ()
type User struct {
ID int `gorm: "primary_key" `
Name string
}
dbPool.AutoMigrate(&User{})
user := User{Name: "John" }
dbPool.Create(&user)
var retrievedUser User
dbPool.First(&retrievedUser, user.ID)
fmt.Fprintf(os.Stdout, "Retrieved user: %+v\n" , retrievedUser)
dbPool.Model(&retrievedUser).Update( "Name" , "Jane" )
dbPool. Delete (&retrievedUser)
}
|