Go配置客户端

OSSClient是OSS的Go客户端,用于管理存储空间和文件等OSS资源。使用Go SDK发起OSS请求时,您需要初始化一个Client实例,并根据需要修改默认配置项。

前提条件

初始化OSSClient前,您需要配置访问凭证。详情请参见配置访问凭证

新建OSSClient

您可以使用以下示例代码,通过加载默认配置的方法新建一个OSSClient。

package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	var (
		// 以华东1(杭州)为例
		region = "cn-hangzhou"

		// 以从环境变量中获取访问凭证为例
		provider credentials.CredentialsProvider = credentials.NewEnvironmentVariableCredentialsProvider()
	)

	// 创建OSS客户端配置
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// 创建OSS客户端
	client := oss.NewClient(cfg)
}

其中,指定区域region时,您可以指定向何处发送请求,例如cn-hangzhoucn-shanghai。有关所支持的区域列表,请参阅OSS地域和访问域名

因为Go SDK没有设置默认区域,所以您需要在加载配置时使用config.WithRegion作为参数显式设置区域。例如:

cfg := oss.LoadDefaultConfig().WithRegion("cn-hangzhou")
重要

Go SDK V2默认使用V4签名,所以必须指定区域参数。

配置OSSClient

在大多数情况下,使用具有默认值的Client能够满足业务需求。您也可以更改Client的默认配置,或自定义HTTP Client,以满足特定环境下的使用需求。

设置OSSClient常用配置

您可以通过config修改常用的配置,示例如下:

cfg := oss.LoadDefaultConfig().
  WithConnectTimeout(10 * time.Second).
  UploadBandwidthlimit(10*1024)
常用配置参数汇总

Region

(必选)请求发送的区域, 必选

WithRegion("cn-hangzhou")

CredentialsProvider

(必选)设置访问凭证

WithCredentialsProvider(provider)

Endpoint

访问域名

WithEndpoint("oss-cn-hanghzou.aliyuncs.com")

HttpClient

HTTP客户端

WithHttpClient(customClient)

RetryMaxAttempts

HTTP请求时的最大尝试次数, 默认值为 3

WithRetryMaxAttempts(5)

Retryer

HTTP请求时的重试实现

WithRetryer(customRetryer)

ConnectTimeout

建立连接的超时时间, 默认值为 5 秒

WithConnectTimeout(10 * time.Second)

ReadWriteTimeout

应用读写数据的超时时间, 默认值为 10 秒

WithReadWriteTimeout(30 * time.Second)

InsecureSkipVerify

是否跳过SSL证书校验,默认检查SSL证书

WithInsecureSkipVerify(true)

EnabledRedirect

是否开启HTTP重定向, 默认不开启

WithEnabledRedirect(true)

ProxyHost

设置代理服务器

WithProxyHost("http://user:passswd@proxy.example-***.com")

ProxyFromEnvironment

通过环境变量设置代理服务器

WithProxyFromEnvironment(true)

UploadBandwidthlimit

整体的上传带宽限制,单位为 KiB/s

WithUploadBandwidthlimit(10*1024)

DownloadBandwidthlimit

整体的下载带宽限制,单位为 KiB/s

WithDownloadBandwidthlimit(10*1024)

SignatureVersion

签名版本,默认值为v4

WithSignatureVersion(oss.SignatureVersionV1)

LogLevel

设置日志级别

WithLogLevel(oss.LogInfo)

LogPrinter

设置日志打印接口

WithLogPrinter(customPrinter)

DisableSSL

不使用https请求,默认使用https

WithDisableSSL(true)

UsePathStyle

使用路径请求风格,即二级域名请求风格,默认为bucket托管域名

WithUsePathStyle(true)

UseCName

是否使用自定义域名访问,默认不使用

WithUseCName(true)

UseDualStackEndpoint

是否使用双栈域名访问,默认不使用

WithUseDualStackEndpoint(true)

UseAccelerateEndpoint

是否使用传输加速域名访问,默认不使用

WithUseAccelerateEndpoint(true)

UseInternalEndpoint

是否使用内网域名访问,默认不使用

WithUseInternalEndpoint(true)

DisableUploadCRC64Check

上传时关闭CRC64校验,默认开启CRC64校验

WithDisableUploadCRC64Check(true)

DisableDownloadCRC64Check

下载时关闭CRC64校验,默认开启CRC64校验

WithDisableDownloadCRC64Check(true)

AdditionalHeaders

指定额外的签名请求头,V4签名下有效

WithAdditionalHeaders([]string{"content-length"})

UserAgent

指定额外的User-Agent信息

WithUserAgent("user identifier")

自定义OSSClient

当常用配置参数无法满足场景需求时,您可以使用WithHTTPClient替换默认的HTTP客户端,示例如下:

package main

import (
	"crypto/tls"
	"net/http"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport"
)

func main() {
	var (
		// 以华东1(杭州)为例
		region = "cn-hangzhou"

		// 以从环境变量中获取访问凭证为例
		provider credentials.CredentialsProvider = credentials.NewEnvironmentVariableCredentialsProvider()
	)

	// 常用超时或其它设置
	transConfig := transport.Config{
		// 连接超时, 默认值 5秒
		ConnectTimeout: oss.Ptr(10 * time.Second),

		// 应用读写数据的超时时间, 默认值 10秒
		ReadWriteTimeout: oss.Ptr(20 * time.Second),

		// 连接空闲超时时间, 默认值 50 秒
		IdleConnectionTimeout: oss.Ptr(40 * time.Second),

		// 网络连接的保持期限, 默认值 30 秒
		KeepAliveTimeout: oss.Ptr(40 * time.Second),

		// 是否打开启HTTP重定向,默认不启用
		EnabledRedirect: oss.Ptr(true),
	}

	// http.Transport 设置
	var transports []func(*http.Transport)

	// 最大连接数,默认值 100
	transports = append(transports, transport.MaxConnections(200))

	// 如果请求有“Expect: 100-Continue”标头,则此设置表示完全写入请求标头后等待服务器第一个响应标头的最长时间,默认 1秒
	transports = append(transports, transport.ExpectContinueTimeout(2*time.Second))

	// TLS的最低版本,默认值 TLS 1.2
	transports = append(transports, transport.TLSMinVersion(tls.VersionTLS13))

	// 是否跳过证书检查,默认不跳过
	transports = append(transports, transport.InsecureSkipVerify(true))
	
	// 更多Transport参数设置,请参考 https://pkg.go.dev/net/http#Transport
        
        // 创建自定义HTTP Client
	customClient := transport.NewHttpClient(&transConfig, transports...)
        
	cfg := oss.LoadDefaultConfig().
		WithHttpClient(customClient).
		WithCredentialsProvider(provider).
		WithRegion(region)

	// 创建OSS客户端
	client := oss.NewClient(cfg)
}

相关文档

关于配置客户端的更多信息,请参见开发者指南