首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用aws-sdk-go-v2中的Values函数?

如何调用aws-sdk-go-v2中的Values函数?
EN

Stack Overflow用户
提问于 2021-10-23 23:10:39
回答 1查看 106关注 0票数 0

我正在编写一个程序,它使用aws-sdk-go-v2并接收来自用户的字符串输入,以确定在S3中存储对象时使用哪个存储类。我必须验证输入是否是允许值,如果不是,我会给出一个允许值的列表。

在aws-sdk-go的v1中,您可以调用s3.StorageClass_Values()来枚举允许的StorageClass值。

代码语言:javascript
复制
func StorageClass_Values() []string

示例:

代码语言:javascript
复制
// v1.go
package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    fmt.Println(s3.StorageClass_Values())
}
代码语言:javascript
复制
$ go run v1.go
[STANDARD REDUCED_REDUNDANCY STANDARD_IA ONEZONE_IA INTELLIGENT_TIERING GLACIER DEEP_ARCHIVE OUTPOSTS]

但是在aws-sdk-go-v2中,为StorageClass引入了类型,枚举值的函数需要调用一个类型。

来自the docs

代码语言:javascript
复制
func (StorageClass) Values() []StorageClass

这似乎需要一个初始化的变量来调用?为什么会这样呢?调用这个函数的惯用方式是什么?

我已经设法用两种不同的方式让它工作了,两种方式似乎都错了。

代码语言:javascript
复制
// 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())
}
代码语言:javascript
复制
$ 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()函数不使用发送给它的类型。

EN

回答 1

Stack Overflow用户

发布于 2021-11-05 07:07:39

(StorageClass) Values()未使用接收器。这是sdk代码:

代码语言:javascript
复制
func (StorageClass) Values() []StorageClass {
    return []StorageClass{
        "STANDARD",
        "REDUCED_REDUNDANCY",
        "STANDARD_IA",
        "ONEZONE_IA",
        "INTELLIGENT_TIERING",
        "GLACIER",
        "DEEP_ARCHIVE",
        "OUTPOSTS",
    }
}

我假设这是因为代码是生成的,并且基于用于为各种语言创建SDK的一些公共表示,

在我看来,一行程序是可行的,因为它避免了引入未使用的变量:

代码语言:javascript
复制
s3Types.StorageClassStandard.Values()

然而,引入一个新的变量会突出一个事实,即调用Values()方法时使用的值没有任何意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69692732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档