为了账号安全,请及时绑定邮箱和手机立即绑定

更好的初始化

更好的初始化

Go
喵喵时光机 2021-09-27 15:43:52
我正在向 AWS 发出 API 调用以获取使用 Golang SDK 的 AMI 列表。该DescribeImages函数接收DescribeImagesInput. 我只想看到我自己的 AMI,所以我的代码是这样做的:// Build inputself := "self"ownerSelf := []*string{&self}ownImages := &ec2.DescribeImagesInput{    Owners: ownerSelf,}// Call the DescribeImages Operationresp, err := svc.DescribeImages(ownImages)if err != nil {    panic(err)}构建这样的输入非常难看。我确信有更好的技术,但是作为 Golang n00b,我不知道。什么是更好的方法?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

你不能得到比这更短的:


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上试一试。


查看完整回答
反对 回复 2021-09-27
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我不知道这能接受多少,但它也应该这样做:


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)

}


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信