golang与pgsql交互的实现
作者:没枕头我咋睡觉 发布时间:2024-05-25 15:11:52
标签:golang,pgsql,交互
1、目的
通过读取配置文件获取pgsql用户名和密码及数据库和数据表,从而读取所需字段值。
2、代码架构
config/config.go:读取配置文件信息
config/config.json:配置文件
handle/handle.go:与pgsql数据库交互,获取所需数据
main.go:主函数
3、代码展示
config.go
package config
import (
"io/ioutil"
"os"
"fmt"
"encoding/json"
)
type Pgsql struct {
//Pgsql账号
Username string `json:"username"`
//Pgsql密码
Password string `json:"password"`
//Pgsql地址
Address string `json:"address"`
//Pgsql端口
Port int `json:"port"`
//数据库名称
Database string `json:"database"`
//表名称
Table string `json:"table"`
//账号字段名称
AccountField string `json:"accountField"`
//密码字段名称
PwdField string `json:"pwdField"`
}
//配置文件路径
var ConfigPath string = "config/config.json"
// pgsql配置信息缓存
var PgsqlData *Pgsql
func Init() {
//初始化配置对象
PgsqlData = new(Pgsql)
//读取配置文件
file, err := os.Open(ConfigPath)
if err != nil {
fmt.Println("config path:", err)
os.Exit(1)
}
bytes, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("config file:", err)
os.Exit(1)
}
//使用json转换至config对象中
err = json.Unmarshal(bytes, PgsqlData)
if err != nil {
fmt.Println("json unmarshal:", err)
os.Exit(1)
}
}
config.json
{
"username": "***",
"password": "*********",
"address": "localhost",
"port": 5432,
"database": "***",
"table": "***",
"accountField": "***",
"pwdField": "***"
}
handle.go
package handle
import (
"database/sql"
"errors"
"fmt"
"pgsql/config"
_ "github.com/lib/pq"
)
func Executl() error {
config.Init()
if config.PgsqlData != nil {
//创建mysql连接
db, err := sql.Open("postgres", fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", config.PgsqlData.Address, config.PgsqlData.Port, config.PgsqlData.Username, config.PgsqlData.Password, config.PgsqlData.Database))
if err != nil {
return err
}
defer db.Close()
str := fmt.Sprintf("select %s,%s from %s where NAME='%s'", config.PgsqlData.AccountField, config.PgsqlData.PwdField, config.PgsqlData.Table, config.PgsqlData.Username)
rows := db.QueryRow(str)
var name *sql.NullString
var pwd *sql.NullString
err = rows.Scan(&name, &pwd)
if err != nil {
return err
}
if name.String == "" || pwd.String == "" {
return errors.New("data is null")
}
fmt.Println("name:",name.String)
fmt.Println("passwd:",pwd.String)
return nil
}
return errors.New("open config file failed")
}
main.go
package main
import (
"pgsql/handle"
"os"
)
func main() {
err := handle.Executl()
if err != nil {
os.Exit(1)
}
}
来源:https://blog.csdn.net/qq_41982304/article/details/125905061


猜你喜欢
- 因为有把python程序打包成exe的需求,所以,有了如下的代码import timeclass LoopOver(Exception):
- javascript上下滑动广告效果 参数说明:客服果果(
- 我们在上传大文件时,可能会由于服务器的原因导致文件上传失败,文件过大时由于服务器的配置或响应事件过长导致上传文件失败,这时候我们可以将一个大
- 推荐阅读:go语言最新版激活教程可以点下这个链接查看。goland永久安装教程,点击此处查看。Go 这几年很火,小哈也蹭业余时间悄 * 学习一
- 大家都知道连续的英文或数字能是容器被撑大,不能根据容器的大小自动换行,网页设计初学者可能不知道怎么处理,下面是CSS如何将他们换行的方法!对
- php 运算符与表达式一、运算符的分类1、按操作数分类1.!true // 一元运算符2.$a+$b // 二元运算符3.true ? 1:
- //记一个问题(已经解决2016.5.5)//在公司项目中遇见一个添加单选项的需求,采用ajax一步请求。为节约资源添加后不刷新网页,js动
- max_redis.php<?phpset_time_limit (0);for($i=1;$i<=1050;$i++){exe
- 我们将使用Python线程来解决Python中的生产者—消费者问题。这个问题完全不像他们在学校中说的那么难。如果你对生产者—消费者问题有了解
- 前言python 文件操作、文件读写(write、read、readlines、readline)、文件的相关操作,简单易懂1 文件操作文件
- 今年我们的祖国多灾多难 雪灾的阴影还没散去又发生了地震。让我们用手中的画笔为5.12地震受灾同胞们祈福并号召大家为灾区人民捐款!中国插画网祈
- 1.下载mysql的repo源$ wget http://repo.mysql.com/mysql-community-release-el
- 升序import pandas as pdimport numpy as npdata = np.random.randint(low=2,
- ---在仓储管理中经常会碰到的一个问题 一、关于LIFO与FIFO的简单说明 ---FIFO: First in, First out.先进
- MS SQL Server中文版的预设日期datetime格式是yyyy-mm-dd hh:mm:ss.mmm 长短日期格式 --短日期格式
- pyplot直方图的绘制import matplotlib.pyplot as pltimport numpy as npfrom pyla
- 例如我要测试一个创建网络的接口,需要先拿token值,而获取token的接口请求成功后,将token存在了响应头headers,postma
- 概述:可以将.py源代码转换成无需源代码的可执行文件(直接就可以运行的程序)因为有的时候Windows,Mac,Linux系统上并没有安装P
- 一个用asp来处理jmail发信的过程,及使用方法. 发信时,直接调用这个过程就行了,很方便。<% dim
- 使用el-upload 上传视频总是报404错误,具体也不知道什么原因(如有知道的请评论告知,谢谢),去网上查了很多,代码写法确定