go - 如何从 for 循环内的函数返回字符串?

标签 go

我有一个我编写的函数,我希望它返回一个字符串。我已经在我的 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/

相关文章:

url - 屏蔽敏感的 url 查询参数

go - 使用chilkat发送电子邮件时如何正确显示字符?

mongodb - Mongo-go-driver:超出上下文截止日期

go - 如何将 prpBytes(描述​​中的链接 src)(ProposalResponsePayload protobuf 消息)反序列化为原始对象

golang源码为什么要这样写

reactjs - 服务器重定向不适用于 ReactJS 代理服务器

go - Go标准库中是否有一个函数可以将缓冲区编码为go中的任何图像格式

go - 在Go中,当您将其名称作为字符串时,如何获取枚举(const iota int)值

Go:根据关键字格式化字符串

go - 带有 cp 的 exec.Command 退出,状态为 1