世界没有悲剧和喜剧之分,如果你能从悲剧中走出来,那就是喜剧;如果你沉缅于喜剧之中,那它就是悲剧。 by 上德若谷
引用于:http://wufazhuce.com/one/1357
变量声明未初始化的默认值
var (
intA int
float32A float32
float64A float64
boolA bool
stringA string
arrA []int
sliceA []int
mapA map[string]int
pointA *int
)
func main() {
//变量声明未初始化的默认值
fmt.Println(intA == 0) //true
fmt.Println(float32A == 0) //true
fmt.Println(float64A == 0) //true
fmt.Println(boolA == false) //true
fmt.Println(stringA == "") //true
fmt.Println(arrA == nil) //true
fmt.Println(sliceA == nil) //true
fmt.Println(mapA == nil) //true
fmt.Println(pointA == nil) //true
}
全局变量和常量
常用书写格式:
/*
全局变量,允许修改,如果声明的变量名:
1、首字母小写,类似于定义的私有变量
2、首字母大写,类似于定义的共有变量
*/
var (
intA = 1
strB = "Go"
arrC = [3]int{1, 2, 3}
floatD = 3.14
boolE = false
PubA = "public" //公共变量
)
/*
全局常量,允许修改,如果声明的变量名:
1、首字母小写,类似于定义的私有变量
2、首字母大写,类似于定义的共有变量
*/
const (
cIntA = 1
)
内部变量
常用书写格式:
func methodName() {
/*
内部变量,只在该函数体内有效
*/
innerA := 123
}
忽略变量
/*
忽略变量,用`_`声明。
Go对于已声明但未使用的变量会在编译阶段报错,所以可用该方法规避此类现象。
常用于遍历slice和map。
*/
_, innerA := 123, 456
fmt.Println(innerA) //456
numbers := make(map[string]int)
numbers["a"] = 1
numbers["b"] = 2
numbers["c"] = 3
//不使用key值时,用`_`忽略掉
for _, value := range numbers {
fmt.Println(value)
}
数组类型的声明和初始化
//声明并初始化数组
//声明了一个长度为3的int数组
a := [3]int{1, 2, 3}
//声明了一个长度为10的int数组,其中前三个元素初始化为1、2、3,其它默认为0
b := [10]int{1, 2, 3}
//可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
c := [...]int{4, 5, 6}
fmt.Println("a len = ", len(a)) //3
fmt.Println("b len = ", len(b)) //10
fmt.Println("c len = ", len(c)) //3
slice类型的声明和初始化
//通过指向一个数组初始化slice类型变量
arrA := [5]int{1, 2, 3, 4, 5}
sliceA := arrA[1:3]
//使用make初始化slice类型变量
//这时sliceB中的前两个元素已经被占用,如果用append往sliceB中添加元素,只能从第三个位置开始
sliceB := make([]int, 2, 7)
//已知道元素值时,初始化切片
sliceD := []int(1, 2)
//实例化一个空切片
//append会从第一个位置添加元素
sliceC := make([]int, 0)
Map类型的声明和初始化
//声明并使用make初始化Map类型
var mapA map[string]int
mapA = make(map[string]int)
//声明并初始化Map类型
mapB := map[string]string{"a": "a1", "b": "b1", "c": "c1", "d": "d1"}
//声明Map类型
mapC := make(map[string]int)