变量申明与初始化
// [1]: 在申明变量时指定类型(显示指定变量的类型)// 可用于任何中央
// 与 var name string = "hello world" 雷同
var name string
name = 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")