变量声明与初始化

// [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")

zhaobuqi
1 声望1 粉丝

下一篇 »
golang het/http包