tencent cloud

数据万象

动态与公告
产品动态
产品公告
产品简介
产品概述
产品优势
应用场景
功能概览
地域与域名
使用限制
产品计费
计费概述
计费方式
计费项
免费额度
欠费说明
查看消费明细
常见问题
快速入门
注册与登录
绑定存储桶
上传和处理文件
下载和删除文件
解绑存储桶
通过 COS 使用数据万象
能力地图
图片处理
媒体处理
内容审核
AI 内容识别
文档处理
智能语音
文件处理
用户指南
概览
存储桶管理
智能工具箱
任务与工作流
数据监控
用量统计
实践教程
版权保护解决方案
图片处理实践
API 授权策略使用指引
工作流实践
API 文档
API 概览
结构体
公共请求头部
公共响应头部
开通万象服务
图片处理
AI 内容识别
智能语音
媒体处理
内容审核
文档处理
文件处理
任务与工作流
云查毒
错误码
请求签名
SDK 文档
SDK 概览
图片处理 Android SDK
图片处理 iOS SDK
COS Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Go SDK
COS iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
小程序 SDK
SDK 产品个人信息保护规则
安全与合规
权限管理
常见问题
基础设置
文档处理
媒体处理
内容识别
智能语音
服务协议
Service Level Agreement
联系我们
词汇表

快速入门

PDF
聚焦模式
字号
最后更新时间: 2024-03-04 16:55:55

下载与安装

相关资源

对象存储 COS 的 XML Go SDK 源码下载地址:XML Go SDK
示例 Demo 下载地址:COS XML Go SDK 示例
更多信息请参见 COS Go SDK API 文档。
SDK 文档中的所有示例代码请参见 SDK 代码示例
SDK 更新日志请参见 ChangeLog
SDK 常见问题请参见:Go SDK 常见问题
说明:
如果您在使用 SDK 时遇到函数或方法不存在等错误,请先将 SDK 升级到最新版再重试。

环境依赖

Golang:用于下载和安装 Go 编译运行环境,请前往 Golang 官网进行下载。

安装 SDK

执行以下命令安装 COS Go SDK:
go get -u github.com/tencentyun/cos-go-sdk-v5

开始使用

下面为您介绍如何使用 COS Go SDK 完成一个基础操作,如初始化客户端、创建存储桶、查询存储桶列表、上传对象、查询对象列表、下载对象和删除对象。

初始化

注意:
建议用户使用子账号密钥 + 环境变量的方式调用 SDK,提高 SDK 使用的安全性。为子账号授权时,请遵循 最小权限指引原则,防止泄漏目标存储桶或对象之外的资源。
如果您一定要使用永久密钥,建议遵循 最小权限指引原则 对永久密钥的权限范围进行限制。
使用 COS 域名生成 COS GO 客户端 Client 结构。

方法原型

func NewClient(uri *BaseURL, httpClient *http.Client) *Client

参数说明

// BaseURL 访问各 API 所需的基础 URL
type BaseURL struct {
// 访问 bucket, object 相关 API 的基础 URL(不包含 path 部分): https://examplebucket-1250000000.cos.<Region>.myqcloud.com
BucketURL *url.URL
// 访问 service API 的基础 URL(不包含 path 部分): https://cos.<Region>.myqcloud.com
ServiceURL *url.URL
// 访问 Batch API 的基础 URL (不包含 path 部分): https://<UIN>.cos-control.<Region>.myqcloud.com
BatchURL *url.URL
// 访问 CI 的基础 URL (不包含 path 部分): https://examplebucket-1250000000.ci.<Region>.myqcloud.com
CIURL *url.URL
}
参数名称
参数描述
类型
是否必填
BucketURL
访问 bucket, object 相关 API 的基础 URL(不包含 path 部分)
string
ServiceURL
访问 service API 的基础 URL(不包含 path 部分)
string
BatchURL
访问 Batch API 的基础 URL (不包含 path 部分)
string
CIURL
访问 CI 的基础 URL (不包含 path 部分)
string

请求示例1:使用永久密钥

// 将 examplebucket-1250000000 和 COS_REGION 修改为用户真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
// 用于 Get Service 查询,默认全地域 service.cos.myqcloud.com
su, _ := url.Parse("https://cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u, ServiceURL: su}
// 1.永久密钥
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})

请求示例2:使用临时密钥

// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
// 2.临时密钥
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// 如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://www.tencentcloud.com/document/product/436/14048
SecretID: "SECRETID",
SecretKey: "SECRETKEY",
SessionToken: "SECRETTOKEN",
},
})
if client != nil {
// 调用 COS 请求
}

说明:
临时密钥生成和使用可参见 临时密钥生成及使用指引

请求示例3:设置域名

通过修改 BaseURL,可以直接使用自定义域名或者全球加速域名访问 COS。
// 使用全球加速域名访问COS
u, _ := url.Parse("http://<BucketName-APPID>.cos.accelerate.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
// 2.临时密钥
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// 如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://www.tencentcloud.com/document/product/436/14048
SecretID: "SECRETID",
SecretKey: "SECRETKEY",
SessionToken: "SECRETTOKEN",
},
})

请求示例4:CRC64校验

COS Go SDK 默认开启了文件上传 CRC64 检验。
注意:
COS Go SDK 版本需要大于等于 v0.7.23。
强烈建议用户不关闭 CRC64 校验。
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid必须填入,可以在COS控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
// 2.临时密钥
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// 如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://www.tencentcloud.com/document/product/436/14048
SecretID: "SECRETID",
SecretKey: "SECRETKEY",
SessionToken: "SECRETTOKEN",
},
})
// 关闭 CRC64 校验
client.Conf.EnableCRC = false


创建存储桶

package main


import (
"context"
"net/http"
"net/url"
"os"


"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})


_, err := c.Bucket.Put(context.Background(), nil)
if err != nil {
panic(err)
}
}

查询存储桶列表

package main


import (
"context"
"fmt"
"net/http"
"os"


"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
c := cos.NewClient(nil, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})


s, _, err := c.Service.Get(context.Background())
if err != nil {
panic(err)
}


for _, b := range s.Buckets {
fmt.Printf("%#v\\n", b)
}
}

上传对象

package main


import (
"context"
"net/http"
"net/url"
"os"
"strings"

"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})
// 对象键(Key)是对象在存储桶中的唯一标识。
// 例如,在对象的访问域名 `examplebucket-1250000000.cos.COS_REGION.myqcloud.com/test/objectPut.go` 中,对象键为 test/objectPut.go
name := "test/objectPut.go"
// 1.通过字符串上传对象
f := strings.NewReader("test")


_, err := c.Object.Put(context.Background(), name, f, nil)
if err != nil {
panic(err)
}
// 2.通过本地文件上传对象
_, err = c.Object.PutFromFile(context.Background(), name, "../test", nil)
if err != nil {
panic(err)
}
// 3.通过文件流上传对象
fd, err := os.Open("./test")
if err != nil {
panic(err)
}
defer fd.Close()
_, err = c.Object.Put(context.Background(), name, fd, nil)
if err != nil {
panic(err)
}
}

查询对象列表

package main


import (
"context"
"fmt"
"net/http"
"net/url"
"os"

"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})


opt := &cos.BucketGetOptions{
Prefix: "test",
MaxKeys: 3,
}
v, _, err := c.Bucket.Get(context.Background(), opt)
if err != nil {
panic(err)
}


for _, c := range v.Contents {
fmt.Printf("%s, %d\\n", c.Key, c.Size)
}
}

下载对象

package main


import (
"context"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"os"

"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})
// 1.通过响应体获取对象
name := "test/objectPut.go"
resp, err := c.Object.Get(context.Background(), name, nil)
if err != nil {
panic(err)
}
bs, _ := ioutil.ReadAll(resp.Body)
resp.Body.Close()
fmt.Printf("%s\\n", string(bs))
// 2.获取对象到本地文件
_, err = c.Object.GetToFile(context.Background(), name, "exampleobject", nil)
if err != nil {
panic(err)
}
}

删除对象

package main


import (
"context"
"net/http"
"net/url"
"os"

"github.com/tencentyun/cos-go-sdk-v5"
)


func main() {
// 将 examplebucket-1250000000 和 COS_REGION 修改为真实的信息
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。https://console.tencentcloud.com/cos5/bucket
// COS_REGION 可以在控制台查看,https://console.tencentcloud.com/cos5/bucket, 关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224
u, _ := url.Parse("https://examplebucket-1250000000.cos.COS_REGION.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/32675
},
})
name := "test/objectPut.go"
_, err := c.Object.Delete(context.Background(), name)
if err != nil {
panic(err)
}
}

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈