我有一个我编写的函数,我希望它返回一个字符串。我已经在我的 for 循环之前声明了该变量,但是当我尝试在函数末尾返回它时,它声称该变量未被使用。返回其他类型时我似乎没有问题。我想弄清楚我做错了什么。
func GetInstanceAlarms(instance *Instance) string {
params := &cloudwatch.DescribeAlarmsInput{}
c := cloudwatch.New(session.New())
resp, err := c.DescribeAlarms(params)
var Arn string
if err != nill {
panic(err.Error())
}
for idx := range resp.MetricAlarms{
for _, alarm := range resp.MetricAlarms[idx].Dimensions{
if *alarm.Name == "InstanceId" && *alarm.Value == instance.InstanceId{
log.Println(resp.MetricAlarms[idx].AlarmArn)
//claims this variable is unused
Arn := resp.MetricAlarms[idx].AlarmArn
}
}
}
return Arn
}
最佳答案
在您的 for
循环中,您重新创建了一个变量 Arn
,它隐藏 外部变量。请记住,:=
创建新变量,=
分配给现有变量。
Arn := resp.MetricAlarms[idx].AlarmArn
此 Arn
变量仅在其包含 block 中有效,一旦退出该 block ,在循环之前创建的外部变量 Arn
将再次可见。
不是创建新变量,而是分配给现有变量。
Arn = resp.MetricAlarms[idx].AlarmArn
阅读更多关于 scope in Go 的信息.
运行 go vet
应该会发现这个问题。
关于go - 如何从 for 循环内的函数返回字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059226/