2018-03-01 21:48
浏览 89


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 {
    for idx := range resp.MetricAlarms{
        for _, alarm := range resp.MetricAlarms[idx].Dimensions{
            if *alarm.Name == "InstanceId" && *alarm.Value == instance.InstanceId{
                //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 (
    func main(){
        fmt.Printf("Checking on %s OS with Go version %s
    ",runtime.GOOS, runtime.Version())
    func test() string {
        var a string
        for i:=0;i<5;i++{
            return a
        return a
    打赏 评论

相关推荐 更多相似问题