"变量声明"之间的差异和"短变量声明"在Go的本地范围内

时间:2016-01-23 15:43:35

标签: go variable-assignment declaration

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

在当地范围:

var c byte = 'A' 

c := byte('A')

我的问题是:

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

1 个答案:

答案 0 :(得分:2)

它们属于同一类型(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

     

Alan A. A. Donovan·Brian W.Kernighan

     

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