# GO SDK 文档
# 概述
本文档主要介绍BOS GO SDK的安装和使用。在使用本文档前,您需要先了解BOS的一些基本知识,并已开通了BOS服务。若您还不了解BOS,可以参考[产品描述](https://cloud.baidu.com/doc/BOS/ProductDescription.html)和[入门指南](https://cloud.baidu.com/doc/BOS/GettingStarted-new.html)。
# 安装SDK工具包
## 运行环境
GO SDK可以在go1.3及以上环境下运行。
## 安装SDK
**直接从github下载**
使用`go get`工具从github进行下载:
```shell
go get github.com/baidubce/bce-sdk-go
```
**SDK目录结构**
```text
bce-sdk-go
|--auth //BCE签名和权限认证
|--bce //BCE公用基础组件
|--http //BCE的http通信模块
|--services //BCE相关服务目录
| |--bos //BOS服务目录
| | |--bos_client.go //BOS客户端入口
| | |--api //BOS相关API目录
| | |--bucket.go //BOS的Bucket相关API实现
| | |--object.go //BOS的Object相关API实现
| | |--multipart.go //BOS的Multipart相关API实现
| | |--module.go //BOS相关API的数据模型
| | |--util.go //BOS相关API实现使用的工具
| |--sts //STS服务目录
|--util //BCE公用的工具实现
```
## 卸载SDK
预期卸载SDK时,删除下载的源码即可。
# 初始化
## 确认Endpoint
在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于[BOS访问域名](https://cloud.baidu.com/doc/BOS/DevRef.html#BOS.E8.AE.BF.E9.97.AE.E5.9F.9F.E5.90.8D)的部分,理解Endpoint相关的概念。百度云目前开放了多区域支持,请参考[区域选择说明](https://cloud.baidu.com/doc/Reference/Regions.html)。
目前支持“华北-北京”、“华南-广州”和“华东-苏州”三个区域。北京区域:`http://bj.bcebos.com`,广州区域:`http://gz.bcebos.com`,苏州区域:`http://su.bcebos.com`。对应信息为:
访问区域 | 对应Endpoint
---|---
BJ | bj.bcebos.com
GZ | gz.bcebos.com
SU | su.bcebos.com
## 获取密钥
要使用百度云BOS,您需要拥有一个有效的AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。
可以通过如下步骤获得并了解您的AK/SK信息:
[注册百度云账号](https://login.bce.baidu.com/reg.html?tpl=bceplat&from=portal)
[创建AK/SK](https://console.bce.baidu.com/iam/?_=1513940574695#/iam/accesslist)
## 新建BOS Client
BOS Client是BOS服务的客户端,为开发者与BOS服务进行交互提供了一系列的方法。
### 使用AK/SK新建BOS Client
通过AK/SK方式访问BOS,用户可以参考如下代码新建一个BOS Client:
```go
import (
"github.com/baidubce/bce-sdk-go/services/bos"
)
func main() {
// 用户的Access Key ID和Secret Access Key
ACCESS_KEY_ID, SECRET_ACCESS_KEY := <your-access-key-id>, <your-secret-access-key>
// 用户指定的Endpoint
ENDPOINT := <domain-name>
// 初始化一个BosClient
bosClient, err := bos.NewClient(AK, SK, ENDPOINT)
}
```
在上面代码中,`ACCESS_KEY_ID`对应控制台中的“Access Key ID”,`SECRET_ACCESS_KEY`对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 [管理ACCESSKEY](https://cloud.baidu.com/doc/BOS/GettingStarted.html#.E7.AE.A1.E7.90.86ACCESSKEY)》。第三个参数`ENDPOINT`支持用户自己指定域名,如果设置为空字符串,会使用默认域名作为BOS的服务地址。
> **注意:**`ENDPOINT`参数需要用指定区域的域名来进行定义,如服务所在区域为北京,则为`http://bj.bcebos.com`。
### 使用STS创建BOS Client
**申请STS token**
BOS可以通过STS机制实现第三方的临时授权访问。STS(Security Token Service)是百度云提供的临时授权服务。通过STS,您可以为第三方用户颁发一个自定义时效和权限的访问凭证。第三方用户可以使用该访问凭证直接调用百度云的API或SDK访问百度云资源。
通过STS方式访问BOS,用户需要先通过STS的client申请一个认证字符串,申请方式可参见[百度云STS使用介绍](https://cloud.baidu.com/doc/BOS/API.html#STS.E7.AE.80.E4.BB.8B)。
**用STS token新建BOS Client**
申请好STS后,可将STS Token配置到BOS Client中,从而实现通过STS Token创建BOS Client。
**代码示例**
GO SDK实现了STS服务的接口,用户可以参考如下完整代码,实现申请STS Token和创建BOS Client对象:
```go
import (
"fmt"
"github.com/baidubce/bce-sdk-go/auth" //导入认证模块
"github.com/baidubce/bce-sdk-go/services/bos" //导入BOS服务模块
"github.com/baidubce/bce-sdk-go/services/sts" //导入STS服务模块
)
func main() {
// 创建STS服务的Client对象,Endpoint使用默认值
AK, SK := <your-access-key-id>, <your-secret-access-key>
stsClient, err := sts.NewClient(AK, SK)
if err != nil {
fmt.Println("create sts client object :", err)
return
}
// 获取临时认证token,有效期为60秒,ACL为空
sts, err := stsClient.GetSessionToken(60, "")
if err != nil {
fmt.Println("get session token failed:", err)
return
}
fmt.Println("GetSessionToken result:")
fmt.Println(" accessKeyId:", sts.AccessKeyId)
fmt.Println(" secretAccessKey:", sts.SecretAccessKey)
fmt.Println(" sessionToken:", sts.SessionToken)
fmt.Println(" createTime:", sts.CreateTime)
fmt.Println(" expiration:", sts.Expiration)
fmt.Println(" userId:", sts.UserId)
// 使用申请的临时STS创建BOS服务的Client对象,Endpoint使用默认值
bosClient, err := bos.NewClient(sts.AccessKeyId, sts.SecretAccessKey, "")
if err != nil {
fmt.Println("create bos client failed:", err)
return
}
stsCredential, err := auth.NewSessionBceCredentials(
sts.AccessKeyId,
sts.SecretAccessKey,
sts.SessionToken)
if err != nil {
fmt.Println("create sts credential object failed:", err)
return
}
bosClient.Config.Credentials = stsCredential
}
```
> 注意:
> 目前使用STS配置BOS Client时,无论对应BOS服务的Endpoint在哪里,STS的Endpoint都需配置为http://sts.bj.baidubce.com。上述代码中创建STS对象时使用此默认值。
## 配置HTTPS协议访问BOS
BOS支持HTTPS传输协议,您可以通过在创建BOS Client对象时指定的Endpoint中指明HTTPS的方式,在BOS GO SDK中使用HTTPS访问BOS服务:
```go
// import "github.com/baidubce/bce-sdk-go/services/bos"
ENDPOINT := "https://bj.bcebos.com" //指明使用HTTPS协议
AK, SK := <your-access-key-id>, <your-secret-access-key>
bosClient, _ := bos.NewClient(AK, SK, ENDPOINT)
```
## 配置BOS Client
如果用户需要配置BOS Client的一些细节的参数,可以在创建BOS Client对象之后,使用该对象的导出字段`Config`进行自定义配置,可以为客户端配置代理,最大连接数等参数。
### 使用代理
下面一段代码可以让客户端使用代理访问BOS服务:
```go
// import "github.com/baidubce/bce-sdk-go/services/bos"
//创建BOS Client对象
AK, SK := <your-access-key-id>, <your-secret-access-key>
ENDPOINT := "bj.bcebos.com"
client, _ := bos.NewClient(AK, SK, ENDPOINT)
//代理使用本地的8080端口
client.Config.ProxyUrl = "127.0.0.1:8080"
```
### 设置网络参数
用户可以通过如下的示例代码进行网络参数的设置:
```go
// import "github.com/baidubce/bce-sdk-go/services/bos"
AK, SK := <your-access-key-id>, <your-secret-access-key>
ENDPOINT := "bj.bcebos.com"
client, _ := bos.NewClient(AK, SK, ENDPOINT)
// 配置不进行重试,默认为Back Off重试
client.Config.Retry = bce.NewNoRetryPolicy()
// 配置连接超时时间为30秒
client.Config.ConnectionTimeoutInMillis = 30 * 1000
```
### 配置生成签名字符串选项
```go
// import "github.com/baidubce/bce-sdk-go/servi