【问题标题】:Difference between "variable declaration" and "short variable declaration" at local scope in GoGo中局部范围内的“变量声明”和“短变量声明”之间的区别
【发布时间】:2016-01-24 00:49:59
【问题描述】:

根据这个问题how-to-define-a-single-byte-variable-in-go-lang

在本地范围内:

var c byte = 'A' 

c := byte('A')

我的问题是:

  1. 它们有相同的机制吗?
  2. 哪一个更容易被 go 编译器理解?

【问题讨论】:

    标签: go variable-assignment declaration


    【解决方案1】:

    它们是相同的类型(byteuint8 的别名)和值。例如,

    package main
    
    import "fmt"
    
    func main() {
        var c byte = 'A'
        d := byte('A')
        fmt.Printf("c: %[1]T %[1]v d: %[2]T %[2]v c==d: %v", c, d, c == d)
    }
    

    输出:

    c: uint8 65 d: uint8 65 c==d: true
    

    它们同样有效;运行时代码是相同的。它们都很容易被 Go 编译器理解。

    The Go Programming Language Specification.

    简短的变量声明使用以下语法:

    ShortVarDecl = IdentifierList ":=" ExpressionList .
    

    它是带有初始化程序的常规变量声明的简写 表达式但没有类型:

    "var" IdentifierList = ExpressionList .
    

    “最好”是一种风格。在给定的上下文中哪个读起来更好?

    The Go Programming Language

    艾伦 A. A. 多诺万 · 布赖恩 W.Kernighan

    由于它们的简洁性和灵活性,短变量 声明用于声明和初始化大部分本地 变量。 var 声明往往是为局部变量保留的 需要与初始化程序不同的显式类型 表达式,或者当变量稍后被赋值时 它的初始值并不重要。

    【讨论】:

    • 关键是哪个更好?在效率方面。如果它们相同,则意味着不同的人将使用不同的方式来归档它。对于 Go 的代码约定来说,这可能是一个相当可悲的事情。
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多