最近从Java转到GO,发现Go里面操作对象有不一样的形式,& 这种该怎么理解呢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从Java转到Go进行阿里云OSS对象存储操作时,您会发现Go SDK在使用方式、配置加载、API调用等方面与Java有显著不同。以下是根据您的需求整理的关键点和示例:
Java中,通常直接通过构造函数传入Endpoint、AccessKeyId、AccessKeySecret等参数来创建OSSClient。
Go V1版 类似,使用oss.New
方法传入Endpoint、AccessKeyId、AccessKeySecret等参数创建客户端,如:
client, err := oss.New(\"yourEndpoint\", \"ak\", \"sk\")
Go V2版 引入了更灵活的配置方式,不再直接在NewClient中传入凭证和Endpoint,而是通过oss.LoadDefaultConfig
方法配置,支持环境变量、共享配置文件等多种凭证提供方式,并可自定义HTTP超时、日志级别、区域等设置,例如:
provider := credentials.NewEnvironmentVariableCredentialsProvider()
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(provider).
WithRegion(\"cn-hangzhou\")
client := oss.NewClient(cfg)
Java与Go V1 中,很多操作是通过直接在Bucket对象上执行方法,如bucket.PutObject
。
Go V2 改为在Client上统一调用操作方法,并且每个操作需要传入context.Context
,请求参数和返回结果也调整为特定的Request和Result结构体,格式更为规范,如:
err = client.PutObject(ctx, &oss.PutObjectRequest{
Bucket: "examplebucket",
Key: "exampleobject.txt",
Body: bytes.NewReader([]byte("example data")),
})
Go V1 使用如Bucket.UploadFile
直接进行文件上传并支持断点续传。
Go V2 引入Uploader、Downloader、Copier作为传输管理器,提供了更细粒度的控制,如分片大小、并发数等,并移除了旧的断点续传接口,需使用Uploader.UploadFile
等新接口实现类似功能。
Go V1 通过osscrypto
包创建加密Bucket进行加密操作。
Go V2 则使用EncryptionClient
,同样基于主密钥RSA进行客户端加密,但API设计更加简洁统一,参考样例代码进行配置即可。
从Java转Go进行阿里云OSS操作时,主要需适应Go SDK的配置方式变化、API调用结构调整、传输管理器的使用以及客户端加密的更新。通过上述要点,您可以快速上手Go语言环境下对阿里云OSS的操作。