-
获取驱动包 下载表1中的驱动包和驱动包校验包。 表1 驱动包下载列表 版本 下载地址 V2.0-3.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: Linux操作系统软件包完整性校验: 上传软件包和软件包校验包到虚拟机的同一目录下。 执行如下命令,校验软件包完整性。 cat
GaussDB _driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK Windows操作系统软件包完整性校验: 使用快捷键“Win+R”打开“运行”窗口。 在“打开”栏,输入“cmd”,按“Enter”回车,打开命令行页面。 执行以下命令,获取驱动包的Hash值。 certutil -hashfile {驱动包本地目录}\{驱动包名} sha256 {驱动包本地目录}:请根据实际下载目录进行替换。例如:C:\Users {驱动包名}:请根据实际下载的驱动包名进行替换。例如:GaussDB_driver.zip 示例:certutil -hashfile C:\Users\GaussDB_driver.zip sha256 将2获取到的Hash值和表1中获取到的驱动包校验包的Hash值进行比较。 若一致则通过校验。 若不一致,请重新下载驱动包,重复1~3进行校验。
-
环境类 Go环境配置 用户需要在环境变量中配置以下参数: GO111MODULE:用户使用在线导入的方式安装Go驱动时需要设置GO111MODULE为on。如果不希望进行go mod工程的改造,需将GO111MODULE设置为off,并手动下载依赖包。依赖包与驱动根目录和业务代码保持同级。 GOPROXY:用户使用在线导入时需配置包含Go驱动包的路径。 用户可以根据自己场景参数配置Go其他相关环境变量。 通过go env查看Go环境变量配置结果,并且查看Go版本是否在1.13或以上。 Go驱动安装 从驱动包中获取Go驱动包到本地。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Go.tar.gz。解压后为Go驱动源码包。 进入Go驱动代码根路径,执行go mod tidy下载相关依赖,需要在环境变量中配置GOPATH=${Go驱动依赖包存放路径}。 若依赖已下载至本地,可以在go.mod里面添加一行“通过replace将Go驱动包替换为本地Go驱动包地址”,表示代码里面所有的import Go驱动包都是走本地路径, 同时依赖也不会从代理里下载。 通过go mod tidy下载相关依赖时,可能会下载某个依赖的低版本,如果依赖的低版本存在漏洞,可以通过更改go.mod文件中对应依赖的版本号的方式,更新依赖到漏洞修复后的版本进行规避风险。 用户不涉及驱动开发,调用Go 1.13版本或以上即可,runtime运行库需要更新至1.18版本及以上。
-
环境类 Go环境配置 用户需要在环境变量中配置以下参数: GO111MODULE:用户使用在线导入的方式安装Go驱动时需要设置GO111MODULE为on;如果不希望进行go mod工程的改造,需将GO111MODULE设置为off,并手动下载依赖包,依赖包与驱动根目录和业务代码保持同级。 GOPROXY:用户使用在线导入时需配置包含Go驱动包的路径。 用户可以根据自己场景参数配置Go其他相关环境变量。 通过go env查看Go环境变量配置结果,并且查看Go版本是否在1.13或以上。 Go驱动安装 从驱动包中获取Go驱动包到本地。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Go.tar.gz。解压后为Go驱动源码包。 进入Go驱动代码根路径,执行go mod tidy下载相关依赖,需要在环境变量中配置GOPATH=${Go驱动依赖包存放路径}。 若依赖已下载至本地,可以在go.mod里面添加一行“通过replace将Go驱动包替换为本地Go驱动包地址”,表示代码里面所有的import Go驱动包都是走本地路径, 同时依赖也不会从代理里下载。 通过go mod tidy下载相关依赖时可能会下载为某个依赖的低版本,如果依赖的低版本存在漏洞,可以通过更改go.mod文件中对应依赖的版本号,更新依赖到漏洞修复后的版本来规避风险。
-
获取驱动包 下载表1中的驱动包和驱动包校验包。 表1 驱动包下载列表 版本 下载地址 V2.0-2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: Linux操作系统软件包完整性校验: 上传软件包和软件包校验包到虚拟机的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK Windows操作系统软件包完整性校验: 使用快捷键“Win+R”打开“运行”窗口。 在“打开”栏,输入“cmd”,按“Enter”回车,打开命令行页面。 执行以下命令,获取驱动包的Hash值。 certutil -hashfile {驱动包本地目录}\{驱动包名} sha256 {驱动包本地目录}:请根据实际下载目录进行替换。例如:C:\Users {驱动包名}:请根据实际下载的驱动包名进行替换。例如:GaussDB_driver.zip 示例:certutil -hashfile C:\Users\GaussDB_driver.zip sha256 将2获取到的Hash值和表1中获取到的驱动包校验包的Hash值进行比较。 若一致则通过校验。 若不一致,请重新下载驱动包,重复1~3进行校验。
-
环境类 Go环境配置 用户需要在环境变量中配置以下参数: GO111MODULE:用户使用在线导入的方式安装Go驱动时需要设置GO111MODULE为on。如果不希望进行go mod工程的改造,需将GO111MODULE设置为off,并手动下载依赖包。依赖包与驱动根目录和业务代码保持同级。 GOPROXY:用户使用在线导入时需配置包含Go驱动包的路径。 用户可以根据自己场景参数配置Go其他相关环境变量。 通过go env查看Go环境变量配置结果,并且查看Go版本是否在1.13或以上。 Go驱动安装 从驱动包中获取Go驱动包。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Go.tar.gz。解压后为Go驱动源码包。 进入Go驱动代码根路径,执行go mod tidy下载相关依赖,需要在环境变量中配置GOPATH=${Go驱动依赖包存放路径}。 若依赖已下载至本地,可以在go.mod里面添加一行“通过replace将Go驱动包替换为本地Go驱动包地址”,表示代码里面所有的import Go驱动包都是走本地路径, 同时依赖也不会从代理里下载。 数据库提供的Go驱动包依赖Go 1.13及以上版本。 通过go mod tidy下载相关依赖时,可能会下载某个依赖的低版本,如果依赖的低版本存在漏洞,可以通过更改go.mod文件中对应依赖的版本号的方式,更新依赖到漏洞修复后的版本进行规避风险。
-
获取驱动包 下载表1中的驱动包和驱动包校验包。 表1 驱动包下载列表 版本 下载地址 V2.0-3.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: Linux操作系统软件包完整性校验: 上传软件包和软件包校验包到虚拟机的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK Windows操作系统软件包完整性校验: 使用快捷键“Win+R”打开“运行”窗口。 在“打开”栏,输入“cmd”,按“Enter”回车,打开命令行页面。 执行以下命令,获取驱动包的Hash值。 certutil -hashfile {驱动包本地目录}\{驱动包名} sha256 {驱动包本地目录}:请根据实际下载目录进行替换。例如:C:\Users {驱动包名}:请根据实际下载的驱动包名进行替换。例如:GaussDB_driver.zip 示例:certutil -hashfile C:\Users\GaussDB_driver.zip sha256 将2获取到的Hash值和表1中获取到的驱动包校验包的Hash值进行比较。 若一致则通过校验。 若不一致,请重新下载驱动包,重复1~3进行校验。
-
调用示例 Go-sdk 调用示例: // 初始化SDK
sdk, err:=tdcsdk.New("/root/test-tdc-sdk-conf/conf.yaml")
if err != nil {
fmt.Println(err)
return
}
// 创建名为“tiger01” 的集合
collectionIndex := "tiger01"
txid, err := sdk.CreateNFTCollection(collectionIndex)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Create collection txid:",txid)
// 生成数字资产meta信息
meta, err := sdk.NewImageMetadata([]byte("123"),"tigerImage",
"http://obs.huawei.com/1/tiger","description",1)
if err != nil {
fmt.Println(err)
return
}
// 铸造数字资产
ntf, txid, err := sdk.NFT721.Mint(collectionIndex,"1",meta)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Mint txid:",txid)
fmt.Println("Mint ntf:",ntf)
// 查询数字资产所有者
owner, err := sdk.NFT721.OwnerOf(collectionIndex,"1")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Collection:",collectionIndex,"token:1 owner is ",owner)
// 生成新的用户信息,包括证书,私钥和地址
cert, sk, receiverAddr, err := sdk.GenerateIdentity(utils.EcdsaWithSha256,"user1")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("cert:",cert)
fmt.Println("sk:",sk)
fmt.Println("addr:",receiverAddr)
// 数字资产转移
txid, err = sdk.NFT721.TransferFrom(collectionIndex,owner,receiverAddr,"1")
if err != nil{
fmt.Println(err)
return
}
fmt.Println("TransferFrom txid:", txid)
// 批量铸造数字资产
batchMintData := &mgmt.BatchMintData{StartTokenID: "5000", Amount: "5000", TokenURI: meta}
txid, err = sdk.NFT1155.BatchMint(collectionIndex, batchMintData)
if err != nil{
fmt.Println(err)
return
}
fmt.Println("BatchMint txid:", txid)
// 铸造可组合资产
nft, txid, err := sdk.NFT998.Mint(collectionIndex, "10", meta)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Mint of composable asset txid:",txid)
fmt.Println("Mint of composable asset nft:",nft)
// 铸造数字资产
nft, txid, err = sdk.NFT721.Mint(collectionIndex,"2",meta)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Mint txid:",txid)
fmt.Println("Mint nft:",nft)
// 查询数字资产拥有者
owner, err = sdk.NFT721.OwnerOf(collectionIndex, "2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("the nft of owner:", owner)
// 加入可组合资产
txid, err = sdk.NFT998.GetChild(owner, collectionIndex, "10", collectionIndex, "2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("GetChild txid:", txid)
// 切换成新的用户身份
err = sdk.SwitchIdentityWithPem(utils.EcdsaWithSha256,cert,sk)
// resourceByte 可以从本地文件获取或者从网络请求中接收图片的字节数组
resourceByte := []byte("资源的byte数组")
resourcePath, resourceUrl, metadata, err := sdk.ToolManager.UploadResourceWithAudit(resourceByte, mgmt.Image, mgmt.ImageJPEG, "1678671385", false)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("UploadResourceWithAudit resourceUrl:", resourceUrl)
fmt.Println("UploadResourceWithAudit metadata:", metadata)
fmt.Println("UploadResourceWithAudit resourcePath:", resourcePath)
// 其他业务调用...
-
SDK下载 SDK中相关方法的使用示例,可参考应用程序的示例GoSample,内含Go版本SDK(GoSample下载地址)。 SDK在不同环境下支持的实例安全机制如下: Windows环境:ECDSA Linux环境:ECDSA Linux环境,Go SDK的编译、运行,需要手动下载并配置openssl(openssl下载链接)。 解压openssl,拷贝openssl文件夹到目录“/usr/local/include/”下。 执行库的导入命令: export CGO_LDFLAGS=-L/usr/local/include/openssl export C_INCLUDE_PATH=/usr/local/include/openssl export LD_LIBRARY_PATH=/usr/local/include/openssl 合约开发需要使用go mod,因此请确保GO111MODULE为on、镜像源配置。请确保可正常访问华为云镜像网站,环境设置命令如下: go env -w GO111MODULE=on
go env -w GOPROXY=https://repo.huaweicloud.com/repository/goproxy/
go env -w GONOSUMDB=*
-
参数说明 参数 参数说明 ctx 表示给定的上下文。 query 被执行的SQL语句。 args 被执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,详情见如下示例。 opts 事务隔离级别和事务访问模式,其中事务隔离级别(opts.Isolation)支持范围为sql.LevelReadUncommitted、sql.LevelReadCommitted、sql.LevelRepeatableRead、sql.LevelSerializable。事务访问模式(opts.ReadOnly)支持范围为true(read only)和false(read write)。 Query类接口Query()、QueryContext()、QueryRow()、QueryRowContext()通常用于查询语句,如SELECT语句。操作语句使用Exec()接口执行,若非查询语句通过Query类接口执行,则执行结果可能与预期不符,因此不建议使用Query类接口执行非查询语句,例如UPDATE/INSERT等。 使用Query类接口执行查询语句的结果需要通过type Rows中Next()接口获取,若不通过Next()接口获取,可能会产生不可预期的错误。
-
示例 //本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)。
package main
//依赖包根据环境中依赖包路径设置。
import (
"database/sql"
_ [go驱动模块名] /*请根据go驱动实际模块名替换*/
"log"
)
func main() {
hostip := os.Getenv("GOHOSTIP") //GOHOSTIP为写入环境变量的IP地址。
port := os.Getenv("GOPORT") //GOPORT为写入环境变量的port。
usrname := os.Getenv("GOUSRNAME") //GOUSRNAME为写入环境变量的用户名。
passwd := os.Getenv("GOPASSWD") //GOPASSWDW为写入环境变量的用户密码。
str := "host=" + hostip + " port=" + port + " user=" + usrname + " password=" + passwd + " dbname=gaussdb sslmode=disable"
db, err := sql.Open("gaussdb", str)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
_, err = db.Exec("create table test_bound(id int, name text)")
// 按位置绑定
_, err = db.Exec("insert into test_bound(id, name) values(:1, :2)", 1, "张三")
if err != nil {
log.Fatal(err)
}
// 按名称绑定
_, err = db.Exec("insert into test_bound(id, name) values(:id, :name)", sql.Named("id", 1), sql.Named("name", "张三"))
if err != nil {
log.Fatal(err)
}
}
-
type ColumnType type ColumnType如下表所示。 方法 描述 返回值 (ci *ColumnType)DatabaseTypeName() 返回列类型的数据库系统名称。返回空字符串表示该驱动类型名字并未被支持。 error (ci *ColumnType)DecimalSize() 返回小数类型的范围和精度。 返回值ok的值为false时,说明给定的类型不可用或者不支持。 precision, scale int64, ok boolean (ci *ColumnType)Length() 返回数据列类型长度。返回值ok的值为false时,说明给定的类型不存在长度。 length int64, ok boolean (ci *ColumnType)ScanType() 返回一种Go类型,该类型能够在Rows.scan进行扫描时使用。 reflect.Type (ci *ColumnType)Name() 返回数据列的名字。 string 父主题: Go接口参考
-
参数说明 参数 参数说明 ctx 表示给定的上下文。 query 被执行的SQL语句。 args 被执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,详情见DB类型中的示例。 Query类接口Query()、QueryContext()、QueryRow()、QueryRowContext()通常用于查询语句,如SELECT语句。操作语句使用Exec()接口执行,若非查询语句通过Query类接口执行,则执行结果可能与预期不符,因此不建议使用Query类接口执行非查询语句,例如UPDATE/INSERT等。 使用Query类接口执行查询语句的结果需要通过type Rows中Next()接口获取,若不通过Next()接口获取,可能会产生不可预期的错误。
-
参数说明 参数 参数说明 ctx 表示给定的上下文。 query 被执行的SQL语句。 args 被执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,详情见DB类型中的示例。 stmt 已有的预处理语句,一般指prepare语句返回的预处理语句。 Query类接口Query()、QueryContext()、QueryRow()、QueryRowContext()通常用于查询语句,如SELECT语句。操作语句使用Exec()接口执行,若非查询语句通过Query类接口执行,则执行结果可能与预期不符,因此不建议使用Query类接口执行非查询语句,例如UPDATE/INSERT等。 使用Query类接口执行查询语句的结果需要通过type Rows中Next()接口获取,若不通过Next()接口获取,可能会产生不可预期的错误。
-
获取驱动包 下载表1中的驱动包和驱动包校验包。 表1 驱动包下载列表 版本 下载地址 V2.0-8.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: Linux操作系统软件包完整性校验: 上传软件包和软件包校验包到虚拟机的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK Windows操作系统软件包完整性校验: 使用快捷键“Win+R”打开“运行”窗口。 在“打开”栏,输入“cmd”,按“Enter”回车,打开命令行页面。 执行以下命令,获取驱动包的Hash值。 certutil -hashfile {驱动包本地目录}\{驱动包名} sha256 {驱动包本地目录}:请根据实际下载目录进行替换。例如:C:\Users {驱动包名}:请根据实际下载的驱动包名进行替换。例如:GaussDB_driver.zip 示例:certutil -hashfile C:\Users\GaussDB_driver.zip sha256 将2获取到的Hash值和表1中获取到的驱动包校验包的Hash值进行比较。 若一致则通过校验。 若不一致,请重新下载驱动包,重复1~3进行校验。
-
环境类 Go环境配置 用户需要在环境变量中配置以下参数: GO111MODULE:用户使用在线导入的方式安装Go驱动时需要设置GO111MODULE为on。如果不希望进行Go mod工程的改造,需将GO111MODULE设置为off,并手动下载依赖包。依赖包与驱动根目录和业务代码保持同级。 GOPROXY:用户使用在线导入时需配置包含Go驱动包的路径。 用户可以根据自己场景参数配置Go其他相关环境变量。 通过go env查看Go环境变量配置结果,并且查看Go版本是否在1.13或以上。 Go驱动安装 从驱动包中获取Go驱动包。包名为GaussDB -Kernel_数据库版本号_操作系统版本号_64bit_Go.tar.gz。解压后为Go驱动源码包。 进入Go驱动代码根路径,执行go mod tidy下载相关依赖,需要在环境变量中配置GOPATH=${Go驱动依赖包存放路径}。 若依赖已下载至本地,可以在go.mod里面添加一行“通过replace将Go驱动包替换为本地Go驱动包地址”,表示代码里面所有的import Go驱动包都是使用本地路径, 同时依赖也不会从代理里下载。 通过go mod tidy下载相关依赖时可能会下载为某个依赖的低版本,如果依赖的低版本存在漏洞,可以通过更改go.mod文件中对应依赖的版本号,更新依赖到漏洞修复后的版本来规避风险。 数据库提供的Go驱动包依赖Go 1.13及以上版本。