登录
首页 >  Golang >  Go问答

路由器的运行条件

来源:stackoverflow

时间:2024-02-08 18:15:22 266浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《路由器的运行条件》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我有 api,我想在不同的条件下运行这个 api,就像 这是我的配置

config := api.config{
        version:          version,
        host:             setting.host,
        key:              setting.key,
        https:            setting.https,
        enable:           setting.enable,
    }

如果配置 yaml 中的 enable 为 true,我想以额外的值运行路由器

if config.enable {
        test_f := func() (func(), error) {
            return df, nil
        }
        router := api.makerouter(&config, test_f)
    }

当启用为假时

else {
        router := api.makerouter(&config, nil)

    }

但我的问题是我还有另一个条件。在这里我收到一个错误,即 undefined: router

if config.Https {
        go router.RunTLS(config.Host, config.Key)
    } else {
        go router.Run(config.Host)
    }
```
how can I solve this

正确答案


您正在块内定义变量 router,这意味着它的作用域为该块;它不存在于该块之外。您需要在块外部定义它,并在内部分配给它:

var router api.whatevertyperouteris
if config.enable {
    test_f := func() (func(), error) {
        return df, nil
    }
    router = api.makerouter(&config, test_f)
} else {
    router = api.makerouter(&config, nil)
}

或者,由于只有一个值不同,因此仅在 if 块中处理该值,并在外部创建路由器:

var test_f func() (func(), error)
if config.Enable {
    test_f = func() (func(), error) {
        return df, nil
    }
}
router := api.MakeRouter(&config, test_f)

总的来说,我更喜欢后者,因为它更清楚正在发生的事情,但如果两种情况之间可能发生更多事情,那么这可能是第一种方法的理由。

规范中详细介绍了标识符范围:https://go.dev/ref/spec#Declarations_and_scope

本篇关于《路由器的运行条件》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>