变量声明与初始化
// [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")
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。