测试环境:
操作系统:centos7.9
CPU架构:x86
Go 语言包:go1.22.3.linux-amd64.tar.gz
1、解压go包并配置
[gbase@gbase8c_tool go_templates]$ tar -zxf go1.22.3.linux-amd64.tar.gz
创建Go_item 目录用于存放后续go测试项目
mkdir /data/go_templates/go_item
配置环境变量,修改~/.bashrc 文件,写入以下内容
# Go
export GOROOT=/data/go_templates/go
export GOPATH=/data/go_templates/go_item
export PATH=$GOROOT/bin:$GOPATH:$PATH
保存退出
2、创建item项目
创建项目目录,根据上面配置的项目路径创建,并生成配置文件
mkdir -p /data/go_templates/go_item/src
# 创建test 项目
go mod init test
下载驱动
#查看goproxy,需要从goproxy下载驱动
go env |grep GOPROXY
# 设置goproxy
go env -w GOPROXY=https://goproxy.cn,direct
# 进入到src目录下
cd /data/go_templates/go_item/src/
# go 拉取驱动
go get github.com/lib/pq
执行拉取驱动后,将驱动安装在/data/go_templates/go_item/pkg/mod目录下,生成github.com驱动目录
(非联网的情况下可以在有网的机器上使用go下载之后,把整个pkg目录拷贝到离线机器的对应目录下,或者直接下载pq放在对应的路径下)
3、Go 测试连接
进入项目目录,编写go测试代码
cd /data/go_templates/go_item/src/
vim test.go
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
var db *sql.DB
func sqlOpen() {
var err error
db, err = sql.Open("postgres", "host=192.168.123.111 port=15400 user=gbase8c password=Database@123 dbname=gbase sslmode=disable")
checkErr(err)
}
func sqlInsert() {
//插入数据
stmt, err := db.Prepare("INSERT INTO go_test(id,name,d_data) VALUES($1,$2,$3)")
checkErr(err)
res, err := stmt.Exec("6666","go","2022-05-25")
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("rows affect:", affect)
}
func sqlDelete() {
//删除数据
stmt, err := db.Prepare("delete from go_test where id=$1")
checkErr(err)
res, err := stmt.Exec(1003)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("rows affect:", affect)
}
func sqlSelect() {
//查询数据
rows, err := db.Query("SELECT * FROM go_test")
checkErr(err)
println("-----------")
for rows.Next() {
var id int
var name string
var d_data string
err = rows.Scan(&id, &name, &d_data)
checkErr(err)
fmt.Println("id = ", id, "\nname = ", name, "\nd_data = ", d_data, "\n-----------")
}
}
func sqlUpdate() {
//更新数据
stmt, err := db.Prepare("update go_test set name=$1 where id=$2")
checkErr(err)
res, err := stmt.Exec("php", 1002)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("rows affect:", affect)
}
func sqlClose() {
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func sqlTest() {
sep := "----------\n"
println(sep, "连接")
sqlOpen()
println(sep, "查询结果,id=1001,1002,1003 三行数据")
sqlSelect()
println(sep, "插入id=6666行")
sqlInsert()
sqlSelect()
println(sep, "更新id=1002行,name值更新为php")
sqlUpdate()
sqlSelect()
println(sep, "删除id=1003行的数据")
sqlDelete()
sqlSelect()
println(sep, "关闭连接")
sqlClose()
}
func main() {
sqlTest()
}
登录数据库创建测试表
create table go_test(id int,name text,d_data timestamp);
insert into go_test values (1001,'java','2022-05-22');
insert into go_test values (1002,'python','2022-05-23');
insert into go_test values (1003,'perl','2022-05-24');
执行代码测试