变量申明与初始化

// [1]:在申明变量时指定类型(显示指定变量的类型)// 可用于任何中央// 与var name string = "hello world"雷同var name stringname = string/* * 类型    变量值  * string hello world */var name string = "hello world"// [2]:类型推断// 可用于任何中央// 不显示指定变量的类型,使它能够被赋予任何类型的值。变量的类型能够在其初始化时,由其余程序动静的地确定var name = getString()var name = "hello world"/* * 类型    变量值  * string hello world *//* [3]:短变量申明 类型推断 * 只能在函数体外部应用 * 在函数外部,能够应用 := 短赋值语句代替隐式类型的 var 申明。 在函数之 * 外,每个语句都以关键字(var、func 等)结尾,因而 := 结构不可用。 * 函数外的申明必须应用 var、func、const 等关键字 * * 当短变量申明在函数体外应用时会报 syntax error: non-declaration    statement outside function body (函数体之外的非申明语句) 谬误 *  * package main * * import "fmt" * * name := "hello world" * func main() { *     fmt.Printf("%T %v", name, name) * } * */name := "hello world"/* * 类型    变量值  * string hello world */

类型推断带来的益处:类型推断能够明显提高程序的灵活性,使代码重构变得更加容易,同时又不会带来额定的累赘,更不会损失程序的运行效率。

类型确定在编译期间实现,不会对程序的运行效率产生任何影响。

能够在申明时就初始化变量

var memo map[string]int = make(map[string]int) var res *TreeNode = &TreeNode{Val:maxVal}

变量的重申明

// 变量重申明即对曾经申明过的变量再次申明// 该处重申明并不精确,因为并未调配新的内存,精确的说应该是短变量申明对其从新赋值// 变量重申明的前提条件:// 1.因为变量的类型在其初始化时就曾经确定了,所以对它再次申明时赋予的类型必须与其本来的类型雷同,否则会产生编译谬误。// 2.变量的重申明只可能产生在某一个代码块中。// 3.变量的重申明只有在应用短变量申明时才会产生,否则无奈通过编译。// 4.被“申明并赋值”的变量必须是多个,并且其中至多有一个是新的变量。var err error// 没有为err从新分配内存,err被从新赋值// 对err进行了重申明n, err := io.WriteString(os.Stdout, "Hello World")