我正在对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,我不知道。什么是更好的方法?
答案 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)
}