繁体   English   中英

在golang中使用条件块之外的变量

Use variable out of conditional block in golang

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

func CheckKafkaReadPartitions(kafkabroker string, topic string, conf config.Config) bool {
    var conn *kafka.Conn

    if conf.TlsEnabled {
        d := &kafka.Dialer{
            TLS: &tls.Config{},
        }
        conn, err := d.Dial("tcp", kafkabroker)
        log.Info("conn is: ", conn)
        log.Info("Using TLS connection")
        if err != nil {
            log.WithError(err).Warn("Kafka broker connection error")
            return false
        }
        defer conn.Close()
    } else {
        conn, err := kafka.Dial("tcp", kafkabroker)
        log.Info("conn is: ", conn)
        log.Info("Using Plaintext connection")
        if err != nil {
            log.WithError(err).Warn("Kafka broker connection error")
            return false
        }
        defer conn.Close()
    }
    log.Info("conn is: ", conn)
    log.Info("Reading Partitions")
    partitions, err := conn.ReadPartitions()
 // SOME OTHER WORK
}

我注意到在调用 ReadPartitions() 方法时,即使在conn, err:= kafka.Dial("tcp", kafkabroker)conn, err:= d.Dial("tcp", kafkabroker)我错过了什么? 有什么办法可以在不清空其内容的情况下从 if/else 块中取出 conn var 吗?

1 个回复

所以基本上这里发生的是一个variable shadowing

Go 具有变量范围,您可以通过在 function 之外定义变量来在全局 scope 中拥有一个变量。 然后你就可以在同一个 package 的任何地方使用这个变量(或者如果它被导出到你的代码中的任何地方)。

然后你就有了在代码块中定义的变量。 var conn *kafka.Conn类似,您可以从定义它的块(以及所有子块)中的任何位置访问此变量。

将块视为由大括号{}括起来的代码,这意味着if/elsefunc块下的单独块。

现在您需要了解的是=:=之间的区别

=用于为变量赋值,而:=是用于声明和分配变量的简写。

因此,通过使用conn, err:= d.Dial("tcp", kafkabroker)代码,您实际上所做的就是在if块中声明新变量,并从d.Dial func cal 的返回值中为它们分配值。

在某些情况下,您可能想要这样做。 最常见的情况是当你有一个 for 循环来启动使用外部块中的变量的 goroutines 时。

1 golang中的条件变量声明?

在Golang中可以像这样进行条件变量类型声明吗? 上面的方法不起作用,但是想法是normalResult和adminResults是非常相似的结构,我将如何做到这一点? 谢谢! ...

2013-10-09 18:35:34 2 6592   go
3 有条件的情况下可变使用不起作用?

所以我的HTML中有10个: 当我向Twitch API发出请求时: 并且服务器以非200状态代码响应我让响应处理程序函数像这样运行callSuccessChecker函数: 这部分工作正常。 这是callSuccessChecker的问题。 具体来说,使用在条件 ...

6 编译器无法捕获条件块中的变量重定义

gcc或Clang都没有设法为此发出警告(或错误),程序在启动时立即崩溃。 有这么好的理由吗? 看起来似乎并不难以捕捉到。 这是块作用域的基础:嵌套作用域继承了封闭块的名称...... 有什么解释吗? 编辑:事实证明崩溃是由于使用Clang。 我来回测试了很多次,似乎可以确 ...

7 从另一个条件块获取变量

我想从有条件的if变量中获取一个赋值为文本框值的形式的变量: 我想在输入input:name之后显示$name值。 ...

2012-09-15 08:20:42 2 65   php/ forms
8 在块中使用变量

我正在使用一些公共API来显示图像,其中我正在使用以下代码来全屏显示图像,一旦全屏关闭,我想使用imgID调用RateImage:方法 由于某种原因,我不知道我的应用程序崩溃了。 错误:地址不包含指向对象文件中某个部分的部分 我经历过这个 谁能告诉我如何在块中传递值? ...

9 通过会话变量在Golang layout.tpl中有条件地呈现HTML

我使用Gorilla会话(通过negroni-sessions)将用户会话存储在cookie中。 我还将github.com/unrolled/render用于HTML模板渲染: main.go: 正如您在上面看到的,我使用了layout.html主HTML模板,该模板在呈现任何 ...

2015-04-17 02:54:12 2 1848   html/ go
10 如果条件块记录一条消息,但是在else块中仍在设置变量

因此,我有了这个javascript函数reOrderJSON,它对数组进行排序,并且如果参数的order等于“ reverse”,则在对数组进行排序后立即对数组进行反转。 我还有一个绑定到关联链接的click事件的函数。 链接一开始看起来像这样: 如您所知,我正在记录一些 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM