跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Go / Golang

Go 语言通过 Gokb 驱动连接 Kingbase 数据库实战

Go 语言通过 Gokb 驱动连接 KingbaseES 数据库的全流程,涵盖环境配置、GOPATH 与 GOMODULE 管理方式、连接验证及 SQL 操作。重点包括驱动安装、依赖处理、事务管理与参数化查询,解决常见编译与连接问题,实现国产数据库的高效集成。

林间仙子发布于 2026/2/7更新于 2026/7/252.8K 浏览
Go 语言通过 Gokb 驱动连接 Kingbase 数据库实战

引言

Kingbase 作为国产数据库代表,本文将介绍 Go 语言通过 Gokb 驱动连接 KingbaseES 数据库的全流程,包含环境配置、连接验证、SQL 执行及常见问题处理,从基础连接到高级操作全面掌握这一技术栈。

一、环境准备

已安装与驱动对应版本的数据库,且数据库连接可用。

1.1 下载 Go

官方地址:https://go.dev/dl/

1.2 安装 Go
操作系统描述
Windows下载 .msi 安装包并运行,按照提示完成安装
macOS下载 .pkg 文件并运行安装程序完成安装
Linux下载 .tar.gz 文件,解压并配置

以下是 Linux 的示例:

tar -zxvf go1.x.x.linux-amd64.tar.gz && export PATH=/go解压后的目录/go/bin:$PATH
1.3 验证安装

在终端运行命令

go version

输出 go version go1.x.x [os/arch]即表示安装成功

二、使用 GOPATH 管理 Gokb

使用 GOPATH 管理 Gokb(GOPATH 或 GOMODULE 根据需要选择一种即可)

2.1 查看或配置 GOPATH

使用命令查看当前的 GOPATH 的路径:

go env

也可以通过命令设置其它的路径为 GOPATH

export GOPATH=xxx 或 go env -w GOPATH=xxx

使用命令 go env 查看 GO111MODULE,默认为空,表示当项目下存在 go.mod 文件时通过 GOMODULE 管理,否则通过 GOPATH 管理,不同 go 版本可能存在差异,可通过命令强制指定使用 GOPATH 管理:

GO111MODULE=off 或 go env -w GO111MODULE=off
2.2 配置 Gokb

解压 go 驱动源码,将 kingbase.com/gokb 完整放置在 GOPATH 的 src 路径下,没有 src 路径时可手动创建。

通过 shell 命令下载 Gokb 的依赖:

go get github.com/shopspring/decimal@latest
go get github.com/golang-sql/civil@latest

如果使用的是 go1.17 及更高版本,go get 不支持在非 GOMODULE 下添加依赖,可以使用 go install 替换 go get 命令。

下载的依赖在 $GOPATH/pkg/mod 目录下,比如 $GOPATH/pkg/mod/github.com/shopspring/[email protected],

将两个依赖包不保留版本号拷贝到 $GOPATH/src 目录下,比如拷贝为 $GOPATH/src/github.com/shopspring/decimal 即可。

2.3 导入 Gokb(此代码在示例文件中已包含)

在用例文件中通过 _ 方式导入 Gokb 驱动即可通过 go 的官方包 database/sql 操作数据库

import (
	"database/sql"	// 提供数据库连接操作等 api
	_ "kingbase.com/gokb"	// 通过_方式导入会调用驱动包的初始化函数,完成注册驱动
)
2.4 编译示例并执行

修改示例文件中的连接串,使用命令编译名为 test.go 的用例文件,得到可执行文件 test 通过./test 执行即可

go build test.go

或可通过以下命令直接执行,此命令包含编译并执行,但是不会生成可执行文件

go run test.go

三、使用 GOMODULE 管理 Gokb

使用 GOMODULE 管理 Gokb(GOPATH 或 GOMODULE 根据需要选择一种即可)

3.1 查看或配置 GOMODULE

在 go 1.11 引入 GO MODULE 管理包,使用以下命令查看 GO111MODULE,默认为空,表示当项目下存在 go.mod 文件时通过 GOMODULE 管理否则通过 GOPATH 管理

go env

不同 go 版本可能存在差异,可通过命令以下命令强制指定使用 GOMODULE 管理

GO111MODULE=on 或 go env -w GO111MODULE=on

在工程目录下使用以下命令初始化一个名为 test 的项目

go mod init test

得到一个 go.mod 文件,初始内容为

module test
go 1.18
3.2 配置 Gokb

使用 GOMODULE 管理依赖包时可以在联网环境下自动拉取或删除项目所需的依赖包,Gokb 尚未发布到开源网站,所以需要手动配置位置

解压 go 驱动源码,将 kingbase.com/gokb 源码放置在需要的任意位置即可

修改 go.mod,添加以下内容:

module test
go 1.18
require kingbase.com/gokb v1.0.0
replace kingbase.com/gokb => kingbase.com/gokb 所在的绝对路径或相对路径

执行以下命令自动拉取项目所需要的其它依赖:

go mod tidy

该命令也会同时拉取 Gokb 所需的依赖包并指定所需的版本,不需要再手动进行管理

3.3 编译用例并执行

修改示例文件中的连接串,使用命令编译名为 test.go 的用例文件,得到可执行文件 test,通过 ./test 执行即可。

go build test.go

或可通过以下命令直接执行,此命令包含编译并执行,但是不会生成可执行文件

go run test.go

四、文件示例模版

package main

import (
	"database/sql"	// 提供数据库连接操作等 api
	"fmt"	// 提供格式化输出的 api
	_ "kingbase.com/gokb"	// 通过_方式导入会调用驱动包的初始化函数,完成注册驱动
)

// 修改此处连接信息为已开启服务的 KES 的信息
const (
	host     = "127.0.0.1"
	port     = 54321
	user     = "system"
	password = "123456"
	dbname   = "test"
)

// 操作的表结构
type GoTable struct {
	Num  int    `db:"num"`
	Text string `db:"text"`
	Blob []byte `db:"blob"`
	Clob string `db:"clob"`
}

// 建立连接
func testConn(connInfo string) (*sql.DB, error) {
	db, err := sql.Open("kingbase", connInfo)
	if err != nil {
		return db, err
	}
	err = db.Ping()
	if err != nil {
		return db, err
	}
	return db, err
}

// 事务操作
func testTran(db *sql.DB, sql string) (err error) {
	txn, err := db.Begin()
	defer txn.Commit()
	if err != nil {
		return err
	}
	_, err = txn.Exec(sql)
	if err != nil {
		return err
	}
	return nil
}

func testInsert(db *sql.DB, sql string) (err error) {
	err = testTran(db, sql)
	return err
}

// 通过预备语句执行
func testPrepare(db *sql.DB, sql string) (err error) {
	stmt, err := db.Prepare(sql)
	defer stmt.Close()
	if err != nil {
		return err
	}
	_, err = stmt.Exec(int64(100), "VARCHAR 中文示例文字", []byte{10, 20, 30, 40, 50}, "CLOB 中文示例文字")
	if err != nil {
		return err
	}
	return nil
}

// 查询操作
func testSelect(db *sql.DB, query string) (data []*GoTable, err error) {
	rows, err := db.Query(query)
	defer rows.Close()
	if err != nil {
		return nil, err
	}
	for rows.Next() {
		var row GoTable
		err = rows.Scan(&row.Num, &row.Text, &row.Blob, &row.Clob)
		if err != nil {
			return nil, err
		}
		data = append(data, &row)
	}
	return data, nil
}

func main() {
	connInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
	db, err := testConn(connInfo)
	if err != nil {
		panic(err)
	}
	fmt.Println("Connection test success!")
	defer db.Close()

	err = testTran(db, "CREATE temp TABLE temp_golang_test (num INTEGER, text VARCHAR, blob BLOB, clob CLOB)")
	if err != nil {
		panic(err)
	}
	fmt.Println("Transaction test success!")

	err = testInsert(db, "insert into temp_golang_test(num,text,blob,clob) values(123456,'ABC!@#123','abcdef123456','123456!@#$%^');")
	if err != nil {
		panic(err)
	}
	fmt.Println("Insert data test success!")

	err = testPrepare(db, "insert into temp_golang_test values($1,$2,$3,$4)")
	if err != nil {
		panic(err)
	}
	fmt.Println("Prepare and execute test success!")

	data, err := testSelect(db, "select * from temp_golang_test;")
	if err != nil {
		panic(err)
	}
	fmt.Println(data[0], "\n", data[1])
	fmt.Println("Select test success!")
}

五、总结

本文通过 Go+Gokb+Kingbase 的集成方案,覆盖了从环境搭建到 SQL 操作的全流程。重点强调了连接验证、参数化查询、事务管理三大核心,并针对常见编译、连接、类型问题提供了解决方案。

目录

  1. 引言
  2. 一、环境准备
  3. 1.1 下载 Go
  4. 1.2 安装 Go
  5. 1.3 验证安装
  6. 二、使用 GOPATH 管理 Gokb
  7. 2.1 查看或配置 GOPATH
  8. 2.2 配置 Gokb
  9. 2.3 导入 Gokb(此代码在示例文件中已包含)
  10. 2.4 编译示例并执行
  11. 三、使用 GOMODULE 管理 Gokb
  12. 3.1 查看或配置 GOMODULE
  13. 3.2 配置 Gokb
  14. 3.3 编译用例并执行
  15. 四、文件示例模版
  16. 五、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • IPIDEA 网页抓取 API 实战:eBay 商品数据采集与 Python 接入
  • Java 集成高德开放平台 WebAPI 实践:POI 搜索 2.0
  • Rust 与 WebAssembly 实战:在浏览器与 Node.js 中运行高性能代码
  • Java 高级开发高频面试题
  • Python入门指南:什么是Python、为什么学Python、如何学习Python
  • 用 Python 生成 Node.js 项目结构的桌面工具
  • WhisperLiveKit 实时语音识别指南:从安装到生产部署
  • ChatGPT、文心一言与通义千问:中文创作能力横向评测
  • Coze AI 智能体平台工作流基础创建与核心节点实战
  • Llama-3.2-3B 本地部署指南:Ollama 运行与 Grafana 监控
  • 从菜鸟到架构师(二):大学经历回顾
  • Cubase 15 核心定位与潜在新功能分析
  • 2026 年主流 AIGC 长文本写作软件实测:5 款头部工具优缺点与场景适配
  • 程序员接单兼职平台盘点与选择指南
  • 华为 OD 机试 C++ 题解:木材切割收益最大化
  • 使用 TRAE CN 与 MasterGo MCP 将设计稿转化为前端代码
  • C++ 自定义排序与优先队列运算符重载
  • 10 个 Python 爬虫入门实战示例
  • 从「AI改变世界」到「AI帮我改Bug」:一个小厂架构师的Agent落地实战
  • Python 属性描述符:从原理到 ORM 实践详解

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online