Go Postgres
原文链接: Go Postgres
Go 有很多用于 PostgreSQL 的驱动。其中,最流行的是 lib/pg。它是使用纯 Go 语言开发的,完整实现 Go 语言 database/sql 规范的驱动。
安装 lib/pg
通过 go get 可以轻松安装 lib/pg
go get github.com/lib/pq
连接到 PostgreSQL
我们使用PHP接口部分的数据库和数据表进行演示。
首先,需要导入两个包:
import (
"database/sql"
_ "github.com/lib/pq"
)
有两种格式来书写 DSN:
"user=postgres dbname=sjk66 password=password sslmode=disable"
或
"postgres://postgres:password@localhost/sjk66?sslmode=disable"
常用参数如下:
参数 含义
dbname 数据库名
user 用户名
password 密码
host 主机
port 端口
sslmode SSL模式 可选值
disable 无SSL
require 总是启用SSL,跳过证书认证
verify-ca 总是启用SSL,使用CA证书进行认证
verify-full 总是启用SSL,使用CA证书进行认证,并且主机名必须与证书相匹配
我们新建一个 GetConn() 函数来连接数据库:
import (
"database/sql"
_ "github.com/lib/pq"
)
func GetConn() (*sql.DB, error){
db, err := sql.Open("postgres://postgres:sjk66.com@localhost/sjk66?sslmode=disable")
if err != nil {
return nil, err
}
return db, nil
}
插入数据
func InsertStock(symbol, company string){
db, err := GetConn()
if err != nil {
panic(err)
}
stmt, err := db.Prepare("INSERT INTO stocks(symbol,company) VALUES($1,$2)")
if err != nil {
panic(err)
}
stmt.Exec(symbol, company)
stmt.Close()
db.Close()
}
修改数据
func UpdateStock(id int, symbol, company string){
db, err := GetConn()
if err != nil {
panic(err)
}
stmt, err := db.Prepare("UPDATE stocks SET company=$2, symbol=$1 WHERE id=$3")
if err != nil {
panic(err)
}
stmt.Exec(symbol, company, id)
stmt.Close()
db.Close()
}
删除记录
func delete(id int){
sql := "DELETE FROM stocks WHERE id=$1"
db, err := GetConn()
if err != nil {
panic(err)
}
stmt, err := db.Prepare(sql)
if err != nil {
panic(err)
}
stmt.Exec(id)
stmt.Close()
db.Close()
}
查询记录
type SJK66StockItem struct {
Id int,
Symbol string,
Company string
}
func FindAll() []*SJK66StockItem{
sql := "SELECT * FROM stock"
db, err := GetConn()
if err != nil {
panic(err)
}
rows, err := db.Query(sql)
if err != nil {
panic(err)
}
data := make([]*SJK66StockItem, 0);
for rows.Next(){
row := new(SJK66StockItem)
rows.Scan(&row.Id, &row.Symbol, &row.Company)
data = append(data, row)
}
rows.Close()
db.Close()
return data
}