【发布时间】:2021-12-10 00:49:01
【问题描述】:
我正在编写一个程序,它使用 aws-sdk-go-v2 并接收来自用户的字符串输入,用于确定在 S3 中存储对象时要使用的存储类。我必须验证输入是否是允许值,如果不是,我会给出一个允许值列表。
在 aws-sdk-go v1 中,您可以调用 s3.StorageClass_Values() 来枚举允许的 StorageClass 值。
func StorageClass_Values() []string
例子:
// v1.go
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/service/s3"
)
func main() {
fmt.Println(s3.StorageClass_Values())
}
$ go run v1.go
[STANDARD REDUCED_REDUNDANCY STANDARD_IA ONEZONE_IA INTELLIGENT_TIERING GLACIER DEEP_ARCHIVE OUTPOSTS]
但在 aws-sdk-go-v2 中,为 StorageClass 引入了类型,枚举值的函数需要调用类型。
来自the docs:
func (StorageClass) Values() []StorageClass
这似乎需要一个初始化的变量来调用?为什么会这样?调用此函数的惯用方式是什么?
我设法让它以两种不同的方式工作,但似乎都错了。
// v2.go
package main
import (
"fmt"
s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types"
)
func main() {
// Create uninitialized StorageClass variable and call .Values()
var sc s3Types.StorageClass
fmt.Println(sc.Values())
// One-liner that uses one of the types directly:
fmt.Println(s3Types.StorageClassStandard.Values())
}
$ go run v2.go
[STANDARD REDUCED_REDUNDANCY STANDARD_IA ONEZONE_IA INTELLIGENT_TIERING GLACIER DEEP_ARCHIVE OUTPOSTS]
[STANDARD REDUCED_REDUNDANCY STANDARD_IA ONEZONE_IA INTELLIGENT_TIERING GLACIER DEEP_ARCHIVE OUTPOSTS]
单行更好,因为它更简洁,但是我必须引用其中一个存储类,它没有特定的含义,所以感觉不对。
我应该使用哪一个?为什么?
我希望他们只是保留 v1 中的调用约定。 v2 中的Values() 函数不使用发送给它的类型。
【问题讨论】:
标签: aws-sdk-go