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

问题描述 投票:-1回答:2

我有一个我写的函数,我希望它返回一个字符串。我在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
}
go
2个回答
1
投票

for循环内部,您重新创建了一个变量Arn,它可以隐藏外部变量。请记住,:=创建新变量,=分配给现有变量。

                Arn := resp.MetricAlarms[idx].AlarmArn

这个Arn变量仅在其包含块中有效,一旦退出块,在循环之前创建的外部变量Arn将再次可见。

而不是创建新变量,而是分配给现有变量。

                Arn = resp.MetricAlarms[idx].AlarmArn

了解更多关于scope in Go的信息。

运行go vet应该抓住这个问题。


1
投票

在你的代码中你有错误!= nil,改为err!= nil

我检查你的代码,我没有看到任何问题。一旦声明了var Arn字符串,默认情况下它的值为零,即空字符串“”。

我用(Mac Os)测试了以下代码,我没有看到任何错误。我还添加了代码来打印版本和操作系统。

package main


import (
    "fmt"
    "runtime"
)


func main(){

    fmt.Printf("Checking on %s OS with Go version %s\n",runtime.GOOS, runtime.Version())
    fmt.Println(test())


}

func test() string {
    var a string

    for i:=0;i<5;i++{
        a:="string"
        return a
    }

    return a

}
© www.soinside.com 2019 - 2024. All rights reserved.