golang 中集成 postgresql 数据库安装:安装 postgresql 驱动、postgresql 数据库和 golang。创建连接池:管理与数据库的连接。执行查询:使用 db.query 方法执行查询。执行更新:使用 db.exec 方法执行更新(插入、更新、删除)。实战案例:使用 rest API 创建资产,并将其存储到 postgresql 数据库中。

Golang 框架如何集成 PostgreSQL 数据库
PostgreSQL 是一款功能强大的开源关系型数据库管理系统,以其可靠性和可扩展性而闻名。在 Golang 中集成 PostgreSQL 可以帮助你轻松地管理数据库连接、查询和数据操作。
先决条件
- 安装和配置 PostgreSQL 数据库
- 安装 Golang 1.18 或更高版本
安装 PostgreSQL 驱动
首先,你需要安装 PostgreSQL 驱动程序以连接到数据库:
| 1 | 
$ go get -u Github.com/jackc/pgx/v4
 | 
 
创建连接池
接下来,创建一个连接池以管理与数据库的连接。连接池可以提高性能并减少创建和销毁连接的开销:
立即学习“go语言免费学习笔记(深入)”;
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 
import(
     "context"
     "database/sql"
     "fmt"
     "log"
     "time"
 
     "github.com/jackc/pgx/v4"
     "github.com/jackc/pgx/v4/stdlib"
 )
 
 vardb *sql.DB
 
 funcinitDB() {
     connectionString := fmt.Sprintf("user=root password=mysecret dbname=mydatabase host=localhost port=5432")
     pool, err := pgx.ParseConfig(connectionString)
     iferr != nil{
         log.Fatalf("unable to parse connection string: %v", err)
     }
     pool.MaxConnections = 10
     pool.MaxConnLifetime = 5* time.Minute
 
     db = stdlib.OpenDB(*pool)
     iferr := db.Ping(context.Background()); err != nil{
         log.Fatalf("unable to connect to database: %v", err)
     }
 }
 | 
 
执行查询
要执行查询,可以使用 db.Query 方法:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 
funcqueryAssets() ([]*Asset, error) {
     rows, err := db.Query("SELECT * FROM assets")
     iferr != nil{
         returnnil, fmt.Errorf("query failed: %v", err)
     }
     deferrows.Close()
 
     varassets []*Asset
     forrows.Next() {
         varasset Asset
         iferr := rows.Scan(&asset.ID, &asset.Name); err != nil{
             returnnil, fmt.Errorf("scan failed: %v", err)
         }
         assets = append(assets, &asset)
     }
     returnassets, nil
 }
 | 
 
执行更新
要执行更新(例如插入、更新或删除),可以使用 db.Exec 方法:
| 1 2 3 4 5 6 7 | 
funcinsertAsset(asset Asset) (int64, error) {
     result, err := db.Exec("INSERT INTO assets (name) VALUES (?)", asset.Name)
     iferr != nil{
         return0, fmt.Errorf("insert failed: %v", err)
     }
     returnresult.RowsAffected(), nil
 }
 | 
 
实战案例
考虑一个示例应用程序,其中我们要将用户提交的数据存储到 PostgreSQL 数据库中:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 
packagemain
 
 import(
     "encoding/JSon"
     "fmt"
     "log"
     "net/HTTP"
 
     "github.com/gorilla/mux"
 )
 
 typeAsset struct{
     ID   int`JSON:"id"`
     Name string`json:"name"`
 }
 
 funcmain() {
     
     initDB()
 
     r := mux.NewRouter()
     r.HandleFunc("/assets", createAsset).Methods("POST")
 
     log.Fatal(http.ListeNANDServe(":8080", r))
 }
 
 funccreateAsset(w http.ResponseWriter, r *http.Request) {
     varasset Asset
     iferr := json.NewDecoder(r.Body).Decode(&asset); err != nil{
         http.Error(w, "Invalid request body", http.StatusBadRequest)
         return
     }
 
     id, err := insertAsset(asset)
     iferr != nil{
         http.Error(w, "Failed to create asset", http.StatusInternalServerError)
         return
     }
 
     w.HEADer().Set("Content-Type", "application/json")
     json.NewEncoder(w).Encode(map[string]int64{"id": id})
 }
 | 
 
这个应用程序允许用户通过一个 REST API 端点创建新资产,并将数据存储在 PostgreSQL 数据库中。