Golang在全局变量中设置变量与函数中的结构

我是 Go 的新手,我不明白为什么该变量tc.Duration没有被设置为全局变量的一部分Config.Core.Cron.Interval。我为测试添加了tc.x& tc.y,它们也没有设置。他们当然在方法中这样做,但我不明白为什么这没有进入全局变量。


为简洁起见,我已经稍微减少了代码,但我相信我仍然拥有所有相关的内容。


var Config Configuration


type Configuration struct {

    Core CoreConfig

}


type CoreConfig struct {

    Cron     CronConfig

}

type CronConfig struct{ Interval TimeConfig }


type TimeConfig struct {

    String   string

    Duration *time.Duration

    x        *int

    y        int

}


func (tc *TimeConfig) setDuration(errs *int) {

    if len(tc.String) > 0 {

        // var err error

        // d := time.Duration(0)

        z := 20

        tc.x = &z

        tc.y = z

        if d, err := time.ParseDuration(tc.String); err != nil {

            logger.Error(err)

            *errs++

        } else {

            tc.Duration = &d

        }

        spew.Dump(Config.Core.Cron.Interval)

    }

}


func (c Configuration) setSpecialValueTypes() error {

    var err error


    errs := 0

    p := &errs


    // Cron

    c.Core.Cron.Interval.String = `15m`

    c.Core.Cron.Interval.setDuration(p)


    if errs > 0 {

        err = errors.New(`Errors occurred while setting special values`)

    }


    return err

}


临摹微笑
浏览 126回答 1
1回答

函数式编程

如果要修改receiver( Configuration),setSpecialValueTypes()它必须是一个指针receiver。无法使用按值复制的值接收器进行操作,因此任何修改都将是该副本的本地修改。请参阅A Tour of Go的这一部分。func (c *Configuration) setSpecialValueTypes() error { ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go