doumi1937
2018-03-01 21:48
浏览 89
已采纳

如何从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
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doulu6160 2018-03-01 22:01
    已采纳

    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.

    已采纳该答案
    打赏 评论
  • dsvjw20866 2018-03-02 06:27

    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
    
    }
    
    打赏 评论

相关推荐 更多相似问题