Go 连接 PG , 需要使用相关库, 比如 pq 或者 postgres 库, 具体使用方法参考如下实例代码

实例


package main

import (
"database/sql"
"fmt"
"log"

_ "github.com/lib/pq" //方式 1
"gorm.io/driver/postgres" //方式 2
"gorm.io/gorm"
)

//连接 PG 方式 1
func test() {
//此时需要根据实际情况修改
connStr2 := "host=127.0.0.1 port=55432 dbname=test user=postgres password=passwd sslmode=disable"
db2, err2 := sql.Open("postgres", connStr2)
defer db2.Close()
if err2 != nil {
log.Fatal(err2)
}
r, err := db2.Query("select inet_server_addr(),pg_is_in_recovery(),current_database(),current_user")
if err != nil {
log.Fatal(err)
}

for r.Next() {
var inet_server_addr string
var pg_is_in_recovery string
var current_database string
var current_user string
err = r.Scan(&inet_server_addr, &pg_is_in_recovery, ¤t_database, ¤t_user)
if err != nil {
log.Fatal(err)
}
fmt.Println("inet_server_addr: " + inet_server_addr)
fmt.Println("pg_is_in_recovery: " + pg_is_in_recovery)
fmt.Println("current_database: " + current_database)
fmt.Println("current_user: " + current_user)
}
}

type Test struct {
Id int
Name string
}

// 连接 PG, 方式 2
func test2() {
// 此处需要根据实际情况修改
dbURL := "postgres://postgres:passwd@127.0.0.1:55432/test"
db, err := gorm.Open(postgres.Open(dbURL), &gorm.Config{})

if err != nil {
log.Fatalln(err)
}
fmt.Printf("db: %v\n", db)
var test Test
db.Raw("select * from test where id=?", 10).Scan(&test)
fmt.Printf("test: %v\n", test.Id)
fmt.Printf("test: %v\n", test.Name)

var test2 []Test
db.Raw("select * from test ").Scan(&test2)
fmt.Printf("test2: %v\n", test2)
fmt.Printf("len(test2): %v\n", len(test2))
var count = len(test2)
for i := 0; i < count; i++ {
fmt.Printf("test2[i]: %v\n", test2[i])
}
}

func main() {
fmt.Println("Hello Go !")
test()
test2()

}

/*
1. 设置环境变量
* 设置 path: /usr/local/go/bin
* 代理设置
go env -w GOPROXY=https://proxy.golang.com.cn,direct

go mod init go_study
go get -u github.com/ramya-rao-a/go-outline
go get -u github.com/smartystreets/goconvey
go get -u cs.opensource.google/go/x/tools

*/

结果

Hello Go !
inet_server_addr: 172.17.0.3
pg_is_in_recovery: false
current_database: test
current_user: postgres
db: &{0xc0002b0120 <nil> 0 0xc0002d6000 1}
test: 10
test: 10name
test2: [{1 1name} {2 2name} {3 3name} {4 4name} {5 5name} {6 6name} {7 7name} {8 8name} {9 9name} {10 10name}]
len(test2): 10
test2[i]: {1 1name}
test2[i]: {2 2name}
test2[i]: {3 3name}
test2[i]: {4 4name}
test2[i]: {5 5name}
test2[i]: {6 6name}
test2[i]: {7 7name}
test2[i]: {8 8name}
test2[i]: {9 9name}
test2[i]: {10 10name}

参考:
​​​ https://goproxy.io/zh/​​​
https://gorm.io/docs/sql_builder.html