Go实现的支持Postgresql的驱动有很多,但是github.com/lib/pq是目前使用最广泛的,也是最稳定的一个Go语言实现的Postgresql驱动。这里,我就使用github.com/lib/pq(以下简称pq)来进行演示。
首先需要创建一个数据库表,语句如下:
CREATE TABLE public."user" ( id serial NOT NULL,name character(100) COLLATE pg_catalog."default" NOT NULL,age integer NOT NULL,CONSTRAINT user_pkey PRIMARY KEY (id) ) WITH ( OIDS = FALSE ) TABLESPACE pg_default; ALTER TABLE public."user" OWNER to postgres;
下面演示下简单的增删改查。代码如下:
package main import ( "fmt" "database/sql" _ "github.com/lib/pq" ) func checkErr(err error) { if err!=nil{ fmt.Println(err) } } func main() { //插入数据 db,err:=sql.Open("postgres","host=127.0.0.1 port=5432 user=postgres password=1234567 sslmode=disable") checkErr(err) stmt,err:=db.Prepare("INSERT INTO PUBLIC.user(name,age) VALUES ($1,$2) RETURNING id") checkErr(err) res,err:=stmt.Exec("jack",23) //受影响行数 id,err:=res.RowsAffected() checkErr(err) fmt.Println(id) //修改数据 stmt,err=db.Prepare("UPDATE PUBLIC.user set name=$1 where id=$2") checkErr(err) res,err =stmt.Exec("hellen",1) checkErr(err) affect,err:=res.RowsAffected() checkErr(err) fmt.Println(affect) //查询数据 rows,err:=db.Query("SELECT * FROM PUBLIC.user") checkErr(err) for rows.Next(){ var id int var name string var age int err=rows.Scan(&id,&name,&age) checkErr(err) fmt.Printf("%d %s %d\n",id,name,age) } //删除数据 stmt,err=db.Prepare("DELETE FROM PUBLIC.user where id=$1") checkErr(err) res,err=stmt.Exec(10) res,err=stmt.Exec(11) res,err=stmt.Exec(12) checkErr(err) affect,err=res.RowsAffected() fmt.Println(affect) db.Close() }