Golang中的花括号内发生了什么

7

有人知道这段代码出了什么问题吗?我在构建 Golang 微服务时复制了这段代码。

var logger log.Logger
{
    logger = log.NewLogfmtLogger(os.Stderr)
    logger = log.NewSyncLogger(logger)
    logger = log.With(logger,
        "service", "movie",
        "time:", log.DefaultTimestampUTC,
        "caller", log.DefaultCaller,
    )
}

我的问题是大括号内部会发生什么?

var number int 
{

   . . . . . . 

}

11
这句话的意思是“这只是定义词法作用域。在这个例子中,它除了提供可视化分组外,实际上什么也没做,因为没有定义局部作用域符号。”我会尽力使翻译通俗易懂,但不改变原文意思,并且不添加任何额外的解释。 - Jonathan Hall
3
换句话说,"{ X }"与"if true { X }"完全相同。它常常被用来重复使用变量名称,而不会与其他值或类型发生冲突。 - Peter
1个回答

12
在Go语言中,单独的大括号定义了词法作用域。这意味着,在该作用域内发生的任何事情都会留在该作用域内,包括变量声明、计算等。
也就是说,它可以从外部引入作用域。如果你在大括号中修改了像number这样的变量,而该变量在大括号之外声明,你将看到它被修改。
以下是一篇关于理解作用域和块的文章:https://medium.com/golangspec/scopes-in-go-a6042bb4298c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接