侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

在go语言中使用PostgreSQL实现一个简单的CRUD示例

Go  /  管理员 发布于 2年前   534

Go是一种日益流行的Web应用程序编程语言,具有用于数据存储和操作的库,使开发快速可靠。

PostgreSQL 是一种开源、符合 ACID 的关系数据库系统,非常适合需要以复杂结构存储数据的应用程序。它们一起形成了一个强大的组合。


进入步骤:

设置您的环境

在创建应用程序之前,您需要设置环境。首先,您需要安装 Go 和 PostgreSQL。

为此,您需要按照我们的帖子如何为您的特定系统安装 Go 和 PostgreSQL 中的说明进行操作。


接下来,您需要安装一个用于使用 PostgreSQL 的库。

对于本指南,我们使用github.com/lib/pq. 

您可以使用命令轻松安装它go get。

go get -u github.com/lib/pq


定义数据库结构

一旦您的环境设置完毕,就可以为您的应用程序定义数据库结构了。

PostgreSQL 允许您使用 SQL 语句来定义数据库,因此对于本示例,您将创建一个表来存储用户信息。

CREATE TABLE User (
    id SERIAL PRIMARY KEY,
    username TEXT NOT NULL,
    password TEXT NOT NULL
);

该id列将是主键并将自动生成。

和字段是必需的,因此username在表定义中设置。

这个简单的表将存储您的应用程序需要的所有用户信息。passwordNOT NULL


建立数据库连接

在使用数据库之前,您需要建立连接。

为此,您将使用库sql.Open()中的函数github.com/lib/pq并传入连接字符串。

db, err := sql.Open("postgres", "postgres://user:password@localhost/db_name?sslmode=disable")
if err != nil {
    log.Fatal(err)
}
defer db.Close()

这将建立与数据库的连接并将其存储在db变量中。

该defer语句将确保连接在程序完成执行时正确关闭。


创建用户

现在您已经建立了与数据库的有效连接,您可以开始编写与其交互的代码。

要创建新用户,您可以使用INSERT INTOSQL 语句和库Exec()中的函数github.com/lib/pq。

query := "INSERT INTO User(username, password) VALUES($1, $2)"
_, err := db.Exec(query, "example_user", "example_password")
if err != nil {
    log.Fatal(err)
}

此代码将使用用户名example_user和密码插入一个新用户example_password。

您可以将这些替换为您自己的值以创建不同的用户。


检索用户

创建用户后,您可以使用SELECTSQL 语句和库QueryRow()中的函数再次检索它github.com/lib/pq。

query := "SELECT * FROM User WHERE username = $1"
user := &User{}
err := db.QueryRow(query, "example_user").Scan(&user.id, &user.username, &user.password)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%+v\n", user)

上面的代码将使用 username 检索用户example_user。

它将用户存储在user变量中并将其打印到控制台。


更新用户

拥有用户后,您可以使用UPDATESQL 语句和库Exec()中的函数更新它github.com/lib/pq。

query := "UPDATE User SET password = $1 WHERE username = $2"
_, err := db.Exec(query, "new_example_password", "example_user")
if err != nil {
    log.Fatal(err)
}

此代码将使用用户名更新用户example_user并将其密码替换为new_example_password.


删除用户

DELETE最后,您可以使用SQL 语句和库Exec()中的函数删除用户github.com/lib/pq。

query := "DELETE FROM User WHERE username = $1"
_, err := db.Exec(query, "example_user")
if err != nil {
    log.Fatal(err)
}

此代码将删除用户名为 username 的用户example_user。


总结

上文实现了如何设置环境、定义数据库、建立连接、创建、检索、更新和删除用户。


  • 上一条:
    在laravel中用Task Runner编写像Blade组件一样的Shell脚本功能
    下一条:
    在go语言中实现欧几里德算法示例步骤详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客