更好的初始化

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


喵喵时光机
浏览 146回答 2
2回答

千巷猫影

你不能得到比这更短的:self := "self"ownImages := &ec2.DescribeImagesInput{Owners: []*string{&self}}或者在一行中(没有self字符串变量):ownImages := &ec2.DescribeImagesInput{Owners: []*string{&[]string{"self"}[0]}}(这里发生的事情是我创建了一个[]string带有一个元素的切片"self",索引其唯一的元素并获取其地址并使用此值来初始化所需的[]*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上试一试。

慕桂英546537

我不知道这能接受多少,但它也应该这样做: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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go