更好初始化

时间:2015-03-31 03:26:17

标签: amazon-web-services go initialization

我正在对AWS进行API调用,以使用Golang SDK获取AMI列表。 DescribeImages函数接收DescribeImagesInput。我只想看看自己的AMI,所以我的代码是这样做的:

// Build input
self := "self"
ownerSelf := []*string{&self}
ownImages := &ec2.DescribeImagesInput{
    Owners: ownerSelf,
}

// Call the DescribeImages Operation
resp, err := svc.DescribeImages(ownImages)
if err != nil {
    panic(err)
}

建立这样的输入是非常难看的。我相信有更好的技术,但作为Golang n00b,我不知道。什么是更好的方法?

2 个答案:

答案 0 :(得分:2)

你不能比这更短:

self := "self"
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&self}}

或者在一行中(没有self字符串变量):

ownImages := &ec2.DescribeImagesInput{Owners: []*string{&[]string{"self"}[0]}}

(这里发生的是我创建一个[]string切片,其中包含一个元素"self",索引其唯一元素并获取其地址并使用此值初始化所需的[]*string。)< / p>

你可以做的是创建一个辅助函数,为你构建string指针的片段:

func sp(es ...string) []*string {
    s := make([]*string, len(es))
    for i := range es {
        s[i] = &es[i]
    }
    return s
}

这样,退场就变成:

ownImages = &ec2.DescribeImagesInput{Owners: sp("self")}

Go Playground上尝试。

答案 1 :(得分:0)

我不知道这是多么可以接受,但它应该这样做:

self := "self"
resp, err := svc.DescribeImages(
    &ec2.DescribeImagesInput{
        Owners: []*string{&self},
    },
}
if err != nil {
    panic(err)
}

当然可以缩短,尽管以可读性为代价IMO

self := "self"
resp, err := svc.DescribeImages(&ec2.DescribeImagesInput{Owners:[]*string{&self}}}
if err != nil {
    panic(err)
}