我有以下适合我的代码。
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
答案 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
}