defer语句
defer也可以称之为延迟函数,顾名思义就是defer的语句会在函数最后时执行。defer一般有以下几点作用,首先最主要的作用便是能及时释放占用的资源,其次可以利用defer捕捉处理异常还有输出日志。还有要注意的是,如果一个函数中有多条defer语句,则defer是采取类似先进后出的原则,例如
func Demo(){
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
defer fmt.Println("4")
}
func main() {
Demo()
}
以上代码执行后会依次输出4,3,2,1。
数组和切片
由于go语言的数组和其他大部分语言没什么不同这里就不多说了,着重说一说切片。切片可以理解为一种动态数组,go语言中数组的长度是固定的,而切片的长度则是可以根据数据进行变化,在往切片中追加元素时可以同时扩大切片容量,提高了代码的灵活性。
定义切片
var slice1 []type = make([]type, len)
或
slice1 := make([]type, len)
其中len为切片初始长度,在创建切片时len也可以不赋值。
切片有一些常用的函数,如len()和cap(),其中len()可以返回此时切片的长度,而cap()则是返回切片此时的容量如
package main
import "fmt"
func main() {
var numbers = make([]int,3,5)
printSlice(numbers)
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
将输出len=3 cap=5 slice={0,0,0}
另外切片还有一个常用的函数,为append()其作用为向切片中追加元素
map
go的map与一些语言中的map类似,map含有两个重要的元素,即key和value,key也可以称为索引,一般为int类型或者string类型。
定义map
var test1 map[string]string
test2 := make(map[string]string)
第一种在使用map前需要使用make来给map分配数据空间,第二种也可以在定义的同时对map赋值。