最近更新时间:2025-09-29 16:15:42
Go SDK默认会开启DNS缓存,开启该功能后,Go SDK会在每次DNS查询成功后更新缓存。如果遇到DNS服务器异常等原因导致DNS查询失败,Go SDK会自动使用缓存中的DNS查询结果。
// 创建访问凭证,请将<AccessKeyID>与<SecretAccessKey>替换成真正的值
cre := credentials.NewStaticCredentials("<AccessKeyID>", "<SecretAccessKey>", "")
// 创建Ks3Client
client := s3.New(&aws.Config{
Credentials: cre, // 访问凭证,必填
Region: "BEIJING", // 访问的地域,必填
Endpoint: "ks3-cn-beijing.ksyuncs.com", // 访问的域名,必填
DisableDnsCache: false, // 禁用DNS缓存,false: 开启DNS缓存,true: 禁用DNS缓存
})1.由于DNS缓存功能在实现时会配置HTTPClient,若您已主动设置HTTPClient配置项,将优先使用您指定的配置,此时DisableDnsCache配置项将被忽略,DNS缓存功能也不会生效。
2.若您希望在自定义HTTPClient的同时仍启用DNS缓存功能,可通过设置http.Transport中的DialContext字段来实现。Go SDK提供了aws.DnsCacheTransportDialContext方法,该方法返回符合DialContext字段要求的函数类型。同时您可以使用aws.NewDnsResolver方法创建DNS缓存解析器,并可指定缓存中保留的DNS查询结果数量。
// 创建访问凭证,请将<AccessKeyID>与<SecretAccessKey>替换成真正的值
cre := credentials.NewStaticCredentials("<AccessKeyID>", "<SecretAccessKey>", "")
// 自定义HTTP客户端
var httpClient = &http.Client{Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: aws.DnsCacheTransportDialContext(&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}, aws.NewDnsResolver(100)),
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}}
// 创建Ks3Client
client := s3.New(&aws.Config{
Credentials: cre, // 访问凭证,必填
Region: "BEIJING", // 访问的地域,必填
Endpoint: "ks3-cn-beijing.ksyuncs.com", // 访问的域名,必填
HTTPClient: httpClient, // 自定义HTTP客户端
})
纯净模式
