1. Go 的 PostgreSQL 驱动程序
使用go get命令来安装
bash
go get github.com/lib/pq
PostgreSQL 数据库凭据:确保要连接的 PostgreSQL 数据库的地址、端口、用户名和密码
2. 导入必要的包
首先,在 Go 代码中导入所需的包,包括 PostgreSQL 驱动程序和其他必要的库。
go
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
3. 创建数据库连接
使用以下代码创建一个与 PostgreSQL 数据库的连接:
go
db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
if err != nil {
panic(err.Error())
}
defer db.Close()
确保将user、password、database_name等参数替换为自己的 PostgreSQL 数据库的凭据和名称。
4.执行 CRUD 操作
现在,我们已经建立了与 PostgreSQL 数据库的连接,让我们继续执行 CRUD 操作。
1)创建记录
要创建新的记录,使用以下代码:
go
_, err := db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
if err != nil {
panic(err.Error())
}
2)读取记录
要读取记录,使用以下代码:
go
rows, err := db.Query("SELECT username, email FROM user")
if err != nil {
panic(err.Error())
}
defer rows.Close()
for rows.Next() {
var username string
var email string
err := rows.Scan(&username, &email)
if err != nil {
panic(err.Error())
}
fmt.Printf("Username: %s, Email: %s\n", username, email)
}
注:rows.Next() 返回true 或 flase,通过返回值判断表中数据进行curd操作
3)更新记录
要更新记录,使用以下代码:
go
_, err := db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
if err != nil {
panic(err.Error())
}
4)删除记录
要删除记录,使用以下代码:
go
_, err := db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
if err != nil {
panic(err.Error())
}
5.简单示例
以下是一个简单的示例,演示如何创建、读取、更新和删除用户记录:
go
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func main() {
db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
if err != nil {
panic(err.Error())
}
defer db.Close()
// 创建记录
_, err = db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
if err != nil {
panic(err.Error())
}
// 读取记录
rows, err := db.Query("SELECT username, email FROM user")
if err != nil {
panic(err.Error())
}
defer rows.Close()
for rows.Next() {
var username string
var email string
err := rows.Scan(&username, &email)
if err != nil {
panic(err.Error())
}
fmt.Printf("Username: %s, Email: %s\n", username, email)
}
// 更新记录
_, err = db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
if err != nil {
panic(err.Error())
}
// 删除记录
_, err = db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
if err != nil {
panic(err.Error())
}
}