变量声明简写:=
???
在函数内部,:=
使用隐式类型,可以用来替换var
声明
在函数外部,每一个语句必须以一个关键字开头,比如var
func
等,因此:=
不可用在函数外部
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block (or the parameter lists if the block is the function body) with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.
redeclaration 相当于给原来的变量赋值,并未声明新的变量,因此在函数外使用是不允许的。
还有一个原因,可能是保证语法的一致性,函数外都会以一个关键字来开头。
go 的类型推导(Type inference)
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128
或者(等价)
var i = 42 // int
var f = 3.142 // float64
var g = 0.867 + 0.5i // complex128
编译器在处理的时候会进行类型推导,从而决定最终值的类型。
类型转换(Type conversions)
跟C语言不同的是(C语言会在赋值时进行隐式转换),go 在两种不同的类型的项中,需要显示的进行类型转换。这里要与类型推导区分开来。
类型推导是在不指明类型时根据值推导
指定变量的类型但类型不匹配必须要显式类型转换
常量声明 const
常量可以是字符、字符串、布尔型、数值,不可以用:=
来声明常量