云服务器内容精选

  • 参数说明 参数 参数说明 ctx 表示给定的上下文。 query 被执行的SQL语句。 args 被执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,详情见如下示例。 opts 事务隔离级别和事务访问模式,其中事务隔离级别(opts.Isolation)支持范围为sql.LevelReadUncommitted,sql.LevelReadCommitted,sql.LevelRepeatableRead,sql.LevelSerializable。事务访问模式(opts.ReadOnly)支持范围为true(read only)和false(read write)。
  • 示例 //本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)。 package main /* Go驱动依赖包位置根据配置的go.mod设置。 */ import ( "database/sql" _ "gitee.com/opengauss/openGauss-connector-go-pq" "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=postgres sslmode=disable" db, err:= sql.Open("opengauss", str) if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } _, err = db.Exec("drop table if exists testuser.test") _, err = db.Exec("create table test(id int, name char(10))") // 按位置绑定 _, err = db.Exec("insert into test(id, name) values(:1, :2)", 1, "张三") if err != nil { log.Fatal(err) } // 按名称绑定 _, err = db.Exec("insert into test(id, name) values(:id, :name)", sql.Named("id", 1), sql.Named("name", "张三")) if err != nil { log.Fatal(err) } }
  • 环境类 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文件中对应依赖的版本号的方式,更新依赖到漏洞修复后的版本进行规避风险。
  • 前提条件 部署 APM Agent时,必须确保接入APM的机器与APM服务网络连通,Agent才能正常工作。可使用Telnet命令测试目标机器与APM服务器网络是否连通。例如,以检查华北-北京四区域,且接入方式为“Skywalking”的连通性为例,请登录应用所部署的机器,并输入命令telnet 100.125.2.112:11800,其他区域或源代码的地址请参考探针接入地址。 GO语言支持Skywalking和OpenTelemetry。
  • 参数 表1 数据库连接参数 参数名称 参数说明 host 主机IP地址,也可通过环境变量${PGHOST}来指定。 port 主机服务器的端口号,也可通过环境变量${PGPORT}来指定。 dbname 数据库名,也可通过环境变量${PGDATABASE}来指定。 user 要连接的用户名,也可通过环境变量${PGUSER}来指定。 password 要连接用户对应的连接密码。 connect_timeout 用于连接服务器操作的超时值,也可通过环境变量${PGCONNECT_TIMEOUT}来指定。 sslmode 启用SSL加密的方式,也可通过环境变量${PGSSLMODE}来指定。 参数取值范围: disable:不使用SSL安全连接。 allow:如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer:如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require:必须使用SSL安全连接,但是只做了 数据加密 ,而并不验证数据库服务器的真实性。 verify-ca:必须使用SSL安全连接,并验证服务器是否具有由可信任的证书机构签发的证书。 verify-full:必须使用SSL安全连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致 sslkey 指定用于客户端证书的密钥位置,如果需要走SSL连接,并且该参数未指定,可通过设置环境变量${PGSSLKEY}来指定。 sslcert 指定客户端SSL证书的文件名,或者通过设置环境变量${PGSSLCERT}来指定。 sslrootcert 指定一个包含SSL证书机构(CA)证书的文件名称,或者通过设置环境变量${PGSSLROOTCERT}来指定。 sslcrl 指定SSL证书撤销列表(CRL)的文件名。列在这个文件中的证书如果存在,在尝试认证该服务器证书时会被拒绝,从而连接失败。也可通过环境变量${PGSSLCRL}来指定。 sslpassword 指定对密钥解密成明文的密码短语,当指定该参数的时候表示sslkey是一个加密存储的文件,当前sslkey支持des/aes加密方式。 说明: DES加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 disable_prepared_binary_result 字符串类型,若设置为yes,表示此连接在从预准备语句接收查询结果时不应使用二进制格式。该参数仅用于调试。 取值范围:yes/no。 binary_parameters 字符串类型,该参数表示是否始终以二进制形式发送[]byte。取值范围:yes/no。若该参数设置为yes,建议绑定参数按照[]byte绑定,可以减少内部类型转换。 target_session_attrs 指定数据库的连接类型,该参数用于识别主备节点,也可通过环境变量${PGTARGETSESSIONATTRS}来指定。默认值为“any”,共有六种:any、master、slave、preferSlave、read-write、read-only。 any:尝试连接URL连接串中的任何一个数据节点。 master:尝试连接到URL连接串中的主节点,如果找不到就抛出异常。 slave:尝试连接到URL连接串中的备节点,如果找不到就抛出异常。 preferSlave:尝试连接到URL连接串中的备数据节点(如果有可用的话),否则连接到主数据节点。 read-write:读写模式,表示只能连接主节点。 read-only:只读模式,表示只能连接备节点。 loggerLevel 日志级别,打印相关调试信息,也可通过环境变量${PG LOG GERLEVEL}来指定。 支持trace/debug/info/warn/error/none,级别从高到低。 application_name 设置正在使用连接的GO驱动的名称。缺省值为go-driver,该参数不建议用户配置。 RuntimeParams 要在连接上设置为会话默认值的运行时参数。例如参数名search_path,application_name,timezone等。各参数的详细介绍参见客户端连接缺省设置,可通过show语法查看参数是否设置成功。 enable_ce 密态数据库开关。enable_ce=1表示go驱动支持密态等值查询基本能力。
  • 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接口参考
  • 消费者增加用户认证信息 无论是普通消息、顺序消息、定时消息,还是事务消息,都参考如下代码。以下加粗内容需要替换为实例自有信息,请根据实际情况替换。 package main import ( "context" "fmt" "os" "time" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/consumer" "github.com/apache/rocketmq-client-go/v2/primitive" ) func main() { c, err := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsResolver(primitive.NewPassthroughResolver([]string{"192.168.0.1:8100"})), consumer.WithCredentials(primitive.Credentials{ AccessKey: os.Getenv("ROCKETMQ_AK"), //用户名和密钥直接硬编码到代码中或者明文存储都存在很大的风险,建议在配置文件或者环境变量中密文存放,使用时解密。 SecretKey: os.Getenv("ROCKETMQ_SK"), }), ) if err != nil { fmt.Println("init consumer error: " + err.Error()) os.Exit(0) } err = c.Subscribe("test", consumer.MessageSelector{}, func(ctx context.Context, msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) { fmt.Printf("subscribe callback: %v \n", msgs) return consumer.ConsumeSuccess, nil }) if err != nil { fmt.Println(err.Error()) } // Note: start after subscribe err = c.Start() if err != nil { fmt.Println(err.Error()) os.Exit(-1) } time.Sleep(time.Hour) err = c.Shutdown() if err != nil { fmt.Printf("Shutdown Consumer error: %s", err.Error()) } } 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 testGroup:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 AccessKey:表示用户名。创建用户的步骤,请参见创建用户。 SecretKey:表示用户的密钥。 test:表示Topic名称。
  • 准备环境 执行以下命令,检查是否已安装Go。 go version 返回如下回显时,说明Go已经安装。 go version go1.16.5 linux/amd64 如果未安装Go,请下载并安装。 在“go.mod”中增加以下代码,添加依赖。 module rocketmq-example-go go 1.13 require ( github.com/apache/rocketmq-clients/golang/v5 )
  • 链代码相关的API Fabric源码包中的shim包提供了如下几种类型的接口,您可以参考使用: 参数解析API:调用链代码时需要给被调用的目标函数/方法传递参数,该API提供解析这些参数的方法。 账本状态数据操作API:该API提供了对账本数据状态进行操作的方法,包括对状态数据的查询及事务处理等。 交易信息获取API:获取提交的交易信息的相关API。 对PrivateData操作的API: Hyperledger Fabric在1.2.0版本中新增的对私有数据操作的相关API。 其他API:其他的API,包括事件设置、调用其他链代码操作。 父主题: Go语言链代码开发
  • 添加数据示例 本章节对添加数据AK/SK方式使用SDK进行示例说明。 添加数据示例代码只需将AK/SK信息替换为实际AK/SK,代码中可以使用AddDataParam类中的ImageUrl、Keywords、CustomNumTags、CustomTags、Desc、ItemId、Force配置服务输入参数,配置完成后运行即可。 添加数据调用示例代码如下: package mainimport ("fmt""github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" imagesearch "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/imagesearch/v2""github.com/huaweicloud/huaweicloud-sdk-go-v3/services/imagesearch/v2/model" region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region")func main() { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") iamEndpoint := "https://iam.cn-north-4.myhuaweicloud.com" endpoint := "https://mms.cn-north-4.myhuaweicloud.com" projectId := "project_id" auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithIamEndpointOverride(iamEndpoint). WithProjectId(projectId). Build() // 初始化客户端 client := imagesearch.NewImageSearchClient( imagesearch.ImageSearchClientBuilder().// 设置region, 示例中为北京四 WithRegion(region.NewRegion("cn-north-4", endpoint)). WithCredential(auth). Build()) request := &model.RunAddDataRequest{} request.ServiceName = "service_name"var listCustomNumTagsbody = map[string]float64{ "key": float64(1), }var listCustomTagsbody = map[string]string{ "key": "value", } // 替换为公网可以访问的图片地址imageUrlAddDataParam:= "https://bucketname.obs.cn-north-4.myhuaweicloud.com/image/test1.jpg"request.Body = &model.AddDataParam{ImageUrl: &imageUrlAddDataParam,CustomNumTags: listCustomNumTagsbody,CustomTags: listCustomTagsbody,ItemId: "item_id",}response, err := client.RunAddData(request)if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }} 添加数据结果输出到控制台表示执行成功。 RunAddDataResponse { "result": "success", "data": { "image_info": { "objects": [ { "box": "135,489,1117,1341", "category": 1, "category_name": "top" } ] } }} 父主题: 使用SDK(GO)
  • 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=*
  • SDK客户端配置 客户端配置如下: SDK配置请参考SDK配置。 华为链实例创建完成后,下载配置文件,具体请参考下载配置文件。 使用解压后的配置文件初始化SDK客户端,初始化方法请参考SDK介绍中的通用方法,配置示例可参考示例Demo。 配置文件主要包含证书文件和yaml配置,实例中每个组织对应一个yaml文件,可通过读取不同的yaml生成不同的SDK客户端对象。 客户端初始化需确保yaml文件中证书文件等路径为证书的实际存放路径。 父主题: Go应用程序开发
  • SDK配置 linux环境,Go SDK的编译、运行,需要手动下载并配置openssl(openssl下载链接) 解压openssl,拷贝openssl文件夹到目录/usr/local/include/下 执行库的导入命令:export LD_LIBRARY_PATH=/usr/local/include/openssl SDK版本号 下载链接 2.1.0.6.41 下载SDK 父主题: Go SDK介绍
  • 合约相关的API contractapi.ContractStub提供如下API接口,可以在合约文件中进行调用。这些API按照功能可以划分为: 表1 辅助功能 接口 说明 FuncName() string 获取智能合约请求中指定的智能合约函数名称。 Parameters() [][]byte 获取请求参数。 ChainID() string 获取智能合约所在链ID。 ContractName() string 获取智能合约名称。 表2 账本数据操作 接口 说明 GetKV(key string) ([]byte, error) 获取某个键对应的值。 PutKV(key string, value []byte) error 添加或更新一对键值。 PutKVCommon(key string, value interface{}) error 添加或更新一对键值。其中值为结构体,需要实现Marshal() ([]byte, error)。 DelKV(key string) error 删除一对键值。 GetIterator(startKey, endKey string) (Iterator, error) 查询指定范围内的键值,查询范围是左闭右开的。 GetKeyHistoryIterator(key string) (HistoryIterator, error) 查询某个键的所有历史值。 SaveComIndex(indexName string, attributes []string, objectKey string) error 创建一个复合键。 例如为"zhangsan":{sex="male", height=175}创建用于查询性别的复合键,可调用SaveComIndex("sex", []string{"male"}, "zhangsan"),如创建用于查询性别和身高的复合键,可调用SaveComIndex("sex/height", []string{"male", "175"}, "zhangsan")。 GetKVByComIndex(indexName string, attributes []string) (Iterator, error) 通过复合键查找满足某种查询条件的键值对。 DelComIndexOneRow(indexName string, attributes []string, objectKey string) error 删除某个复合键。 父主题: Go合约开发
  • 代码示例 本示例用于将examplebucket并行文件系统中的folderName/originalObjectName对象重命名为newFolderName/newObjectName。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package main import ( "fmt" "os" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.RenameFileInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定源对象名,此处以 folderName/originalObjectName 为例。 input.Key = "folderName/originalObjectName" // 指定目标对象名,此处以 newFolderName/newObjectName 为例。 input.NewObjectKey = "newFolderName/newObjectName" // 重命名对象 output, err := obsClient.RenameFile(input) if err == nil { fmt.Printf("Rename File(%s) successful with bucket(%s)!\n", input.Key, input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Rename File(%s) fail with bucket(%s)!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }