将切片/数组传递给另一个结构

时间:2015-11-18 20:18:14

标签: go

我有以下适合我的代码。

params := &cloudformation.CreateStackInput{
    StackName:   aws.String(d.MachineName),
    TemplateURL: aws.String(d.CloudFormationURL),
    Parameters: []*cloudformation.Parameter{
        {
            ParameterKey:   aws.String("KeyName"),
            ParameterValue: aws.String(d.KeyPairName),
        },
    },
}

我想外化参数的创建,所以我创建了以下方法。

func (d *Driver) createParams() []cloudformation.Parameter {

val := "KeyName=Foo|KeyName2=bar"

s := strings.Split(val, "|")

a := []cloudformation.Parameter{}

for _, element := range s {

    pairs := strings.Split(element, "=")

    key := pairs[0]
    value := pairs[1]

    par := cloudformation.Parameter{
        ParameterKey:   aws.String(key),
        ParameterValue: aws.String(value),
    }

    a = append(a, par)

}

return a

}

我的问题是如何将createParams的输出传递给CreateStackInput的参数?

params := &cloudformation.CreateStackInput{
    StackName:   aws.String(d.MachineName),
    TemplateURL: aws.String(d.CloudFormationURL),
    Parameters:  d.createParam(),
}

以上产量

cannot use d.createParam() (type []cloudformation.Parameter) as type []*cloudformation.Parameter in field value

1 个答案:

答案 0 :(得分:0)

指针类型与它们指向的解除引用类型不兼容,当您尝试将[]*cloudformation.Parameter设置为[]cloudformation.Parameter时,错误会告诉您这一点。将createParams的返回类型更改为[]*cloudformation.Parameter并设置par := &cloudformation.Parameter

func (d *Driver) createParams() []*cloudformation.Parameter {
  val := "KeyName=Foo|KeyName2=bar"
  s := strings.Split(val, "|")
  a := []*cloudformation.Parameter{} //a should be a slice of pointers
  for _, element := range s {
      pairs := strings.Split(element, "=")
      key := pairs[0]
      value := pairs[1]
      par := &cloudformation.Parameter{ //& turns par into a pointer to the parameter
          ParameterKey:   aws.String(key),
          ParameterValue: aws.String(value),
      }
      a = append(a, par)
    }
  return a
  }