本次使用到的工具是VScode,此外还有Go语言和PG数据库,请自行下载并配置环境。
首先要设置驱动
以下是Go实现的支持PostgreSQL的驱动,因为国外很多人在开发中使用了这个数据库。
- GitHub - lib/pq: Pure Go Postgres driver for database/sql支持database/sql驱动,纯Go写的
- github.com/jbarham/gop… 支持database/sql驱动,纯Go写的
- github.com/lxn/go-pgsq… 支持database/sql驱动,纯Go写的
这里用到第一个链接提供的安装指令,在终端输入指令如下安装驱动:
go get github.com/lib/pq
ps:如果你遇到了类似网站长时间无法响应的问题,那么应该是国内网络问题,需要在命令行调整go的配置如下:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
然后使用 go env 命令查看配置信息
GO111MODULE和GOPROXY变为以上设置值则设置成功。
安装驱动后import _ "github.com/lib/pq"(匿名加载)连接PG数据库如下:
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
var db *sql.DB
func sqlOpen() {
var err error
db, err = sql.Open("postgres", "port=5432 user=postgres password=postgres dbname=GolangTest01 sslmode=disable")
println("连接成功!")
//port端口号,默认是5432;
//或者这种方式打开
//db, err := sql.Open("postgres", "postgres://pqgotest:postgres@localhost/pqgotest?sslmode=verify-full")
if err != nil {
panic(err)
}
}
func sqlInsert() {
//插入数据
stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
checkErr(err)
res, err := stmt.Exec("eren", "调查团", "2004-03-09")
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("rows affect:", affect)
}
func sqlDelete() {
//删除数据
stmt, err := db.Prepare("delete from userinfo where username=$1")
checkErr(err)
res, err := stmt.Exec("eren")
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(" Delete : rows affect:", affect)
}
func sqlSelect() {
//查询数据
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
println("-----------")
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &created, &department)
checkErr(err)
fmt.Println("|uid = ", uid, " name = ", username, " dep = ", department, " created = ", created, "-----------")
}
}
func sqlUpdate() {
//更新数据
stmt, err := db.Prepare("update userinfo set username=$1 where uid=$2")
checkErr(err)
res, err := stmt.Exec("王大", 8)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("rows affect:", affect)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func main() {
sep := "----------"
sqlOpen()
println(sep, "*sqlOpen")
sqlSelect()//查
println(sep, "*sqlSelect")
sqlInsert()//增
sqlSelect()
println(sep, "*sqlInsert")
sqlUpdate()//改
sqlSelect()
println(sep, "*sqlUpdate")
sqlDelete()//删
sqlSelect()
println(sep, "*sqlDelete")
db.Close()
println(sep, "*sqlClose")
}