go语言操作 PostgreSQL 数据库

1. Go 的 PostgreSQL 驱动程序

使用go get命令来安装

bash 复制代码
go get github.com/lib/pq

PostgreSQL 数据库凭据:确保要连接的 PostgreSQL 数据库的地址、端口、用户名和密码

2. 导入必要的包

首先,在 Go 代码中导入所需的包,包括 PostgreSQL 驱动程序和其他必要的库。

go 复制代码
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

3. 创建数据库连接

使用以下代码创建一个与 PostgreSQL 数据库的连接:

go 复制代码
db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
if err != nil {
    panic(err.Error())
}
defer db.Close()

确保将user、password、database_name等参数替换为自己的 PostgreSQL 数据库的凭据和名称。

4.执行 CRUD 操作

现在,我们已经建立了与 PostgreSQL 数据库的连接,让我们继续执行 CRUD 操作。

1)创建记录

要创建新的记录,使用以下代码:

go 复制代码
_, err := db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
if err != nil {
    panic(err.Error())
}
2)读取记录

要读取记录,使用以下代码:

go 复制代码
rows, err := db.Query("SELECT username, email FROM user")
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var username string
    var email string
    err := rows.Scan(&username, &email)
    if err != nil {
        panic(err.Error())
    }
    fmt.Printf("Username: %s, Email: %s\n", username, email)
}

注:rows.Next() 返回true 或 flase,通过返回值判断表中数据进行curd操作

3)更新记录

要更新记录,使用以下代码:

go 复制代码
_, err := db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
if err != nil {
    panic(err.Error())
}
4)删除记录

要删除记录,使用以下代码:

go 复制代码
_, err := db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
if err != nil {
    panic(err.Error())
}

5.简单示例

以下是一个简单的示例,演示如何创建、读取、更新和删除用户记录:

go 复制代码
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // 创建记录
    _, err = db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
    if err != nil {
        panic(err.Error())
    }

    // 读取记录
    rows, err := db.Query("SELECT username, email FROM user")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

    for rows.Next() {
        var username string
        var email string
        err := rows.Scan(&username, &email)
        if err != nil {
            panic(err.Error())
        }
        fmt.Printf("Username: %s, Email: %s\n", username, email)
    }

    // 更新记录
    _, err = db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
    if err != nil {
        panic(err.Error())
    }

    // 删除记录
    _, err = db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
    if err != nil {
        panic(err.Error())
    }
}
相关推荐
鼠鼠我捏,要死了捏44 分钟前
PostgreSQL性能优化实践指南:从原理到实战
postgresql·performance·tuning
小光学长1 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室1 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇1 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
hackchen1 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
云游2 小时前
利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
分布式·postgresql·zookeeper·apache·工作流任务调度
float_六七3 小时前
SQL六大核心类别全解析
数据库·sql·oracle
争不过朝夕,又念着往昔3 小时前
Go语言反射机制详解
开发语言·后端·golang
Jerry Lau3 小时前
go go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南
前端·golang·gin
Code季风5 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul