duanjiao8007 2015-03-31 03:26 采纳率: 100%
浏览 26
已采纳

更好的初始化

I am making an API call to AWS to get a list of AMIs using the Golang SDK. The DescribeImages function takes in DescribeImagesInput. I only want to see my own AMIs, so my code is doing this:

// 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)
}

Building input like that is very ugly. I am sure there is a better technique, but being a Golang n00b, I don't know it. What is a better way to do?

  • 写回答

2条回答 默认 最新

  • dttnb997315 2015-03-31 06:35
    关注

    You can't get it any shorter than this:

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

    Or in one line (without the self string variable):

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

    (What happens here is I create a []string slice with one element "self", index its only element and take its address and use this value to initialize the required []*string.)

    What you can do is create a helper function which constructs the slice of string pointers for you:

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

    With this, the delcaration becomes:

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

    Try it on the Go Playground.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题