更好的初始化
Better initialization
我正在 API 调用 AWS 以使用 Golang SDK 获取 AMI 列表。 DescribeImages
function takes in 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,我不知道。什么是更好的方法?
我不知道这有多容易接受,但它应该这样做:
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)
}
没有比这更短的了:
self := "self"
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&self}}
或者在一行中(没有 self
字符串变量):
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&[]string{"self"}[0]}}
(这里发生的是我用一个元素 "self"
创建了一个 []string
切片,索引它唯一的元素并获取它的地址并使用这个值来初始化所需的 []*string
。 )
你可以做的是创建一个辅助函数,它为你构建 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 上试用。
我正在 API 调用 AWS 以使用 Golang SDK 获取 AMI 列表。 DescribeImages
function takes in 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,我不知道。什么是更好的方法?
我不知道这有多容易接受,但它应该这样做:
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)
}
没有比这更短的了:
self := "self"
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&self}}
或者在一行中(没有 self
字符串变量):
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&[]string{"self"}[0]}}
(这里发生的是我用一个元素 "self"
创建了一个 []string
切片,索引它唯一的元素并获取它的地址并使用这个值来初始化所需的 []*string
。 )
你可以做的是创建一个辅助函数,它为你构建 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 上试用。