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

I have a function I have written and I would like it to return a string. I have declared the variable before my for loop, but when I try and return it at the end of the function it claims the variable is unused. I do not seem to have the problem when returning other types. I am trying to figure out what I am doing wrong.

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
}

Inside your for loop you have recreated a variable Arn which shadows the outer variable. Remember that := creates new variables, and = assigns to existing variables.

                Arn := resp.MetricAlarms[idx].AlarmArn

This Arn variable is only valid in its containing block, and once you exit the block, the outer variable Arn, created just before the loop, becomes visible again.

Instead of creating a new variable, assign to the existing one.

                Arn = resp.MetricAlarms[idx].AlarmArn

Read more about scope in Go.

Running go vet should catch this issue.

In you code you have err!=nill, change to err != nil

I check your code, I don't see any issue. Once you declared var Arn string, by default it has zero value i.e empty string "".

I tested with (Mac Os) with the following code and I don't see any error. Also I have added in code to print go version and OS.

package main


import (
    "fmt"
    "runtime"
)


func main(){

    fmt.Printf("Checking on %s OS with Go version %s
",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

}