Go 连接 PG

Go 连接 PG,第1张

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:[email protected]: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  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://blog.csdn.net/weixin_42100098/article/details/80143023
https://gorm.io/docs/sql_builder.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/996102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存