多次返回时始终是一个新变量

时间:2017-09-04 19:29:08

标签: go

我面临着Golang的一个奇怪问题。

init()函数上,我想为我在该函数外声明的变量赋值。

但要将值赋给此var,我需要得到     error 检查一切是否正常。

以下是代码:

var retryValue time.Duration

func init() {
    retryValue, err := time.ParseDuration(retries)

    if err != nil {
        log.Fatal("retries value is invalid", err)
    }
}

func a(){
    fmt.Println(retryValue)
}

我得到编译错误:     retryValue declared and not used

我需要将init()更改为:

func init() {
    var err error
    retryValue, err = time.ParseDuration(retries)

if err != nil {

log.Fatal("retries value is invalid", err)
    }
}

还有另一种方法可以解决这个问题吗?     := 如果已经声明了其中一个变量,总是创建一个新变量?这是关于变量golang's sope?

谢谢!

2 个答案:

答案 0 :(得分:2)

有两种基本方法可以做到这一点。你找到了一个:

var retryValue time.Duration

func init() {
    var err error
    retryValue, err = time.ParseDuration(retries)

    if err != nil {
        log.Fatal("retries value is invalid", err)
    }
}

稍微短一些的方法是:

var retryValue = func() time.Duration {
    rv, err := time.ParseDuration(retries)
    if err != nil {
        log.Fatal("retries value is invalid", err)
    }
    return rv
}()

但是比其中任何一个更好,只是直接指定值,而不是解析它:

var retryValue = 15 * time.Minute // or whatever value you want

答案 1 :(得分:-2)

您的修复确实是执行此操作的最短路径,并且没有其他方法可以解决此问题。

这个问题非常罕见,实际上它并不是一个真正的问题,毕竟它只是一条(短)线。