【问题标题】:Better initialization更好的初始化
【发布时间】:2015-06-04 06:54:42
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services go initialization


    【解决方案1】:

    你不能比这更短:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-13
        • 2015-04-15
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        • 2016-07-04
        • 2011-01-26
        相关资源
        最近更新 更多