数据类型
数组切片
创建数组切片
基于数组:数组切片可以基于一个存在的数组创建。数组切片可以只使用数组的一部分元素或着整个数组来创建,甚至可以创建一个比数组还要大的数组切片。
packagemain
import"fmt"
funcmain(){
//定义数组
varmyArray[10]int=[10]int{1,2,3,4,5,6,7,8,9,10}
//基于数组创建切片
varmySlice[]int=myArray[5:]
fmt.Println("myarray:")
fori:=rangemyArray{
fmt.Printf("%v",i)
}
fmt.Println()
fmt.Println("myslice:")
forj:=rangemySlice{
fmt.Printf("%v",j)
}
fmt.Println()
}
基于数组的所有元素创建数组切片:
MySlice = myArray[:]
基于数组的前五个元素创建数组切片:
MySlice =myArray[:5]
基于从第五个元素开始的所有元素创建数组切片:
MySlice=myArray[5:]
直接创建
并非一定要准备一个数组才能创建数组切片,go语言提供内置函数make()可以用于灵活的创建数组切片。
创建一个初始元素个数为5的数组切片,元素初始值为0:
MySlice :=make([]int,5)
创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素大小的存储空间
Mysclice :=make([]int,5,10)
直接创建并初始化包含5个元素的数组切片
Mysclice :=[]int{1,2,3,4,5}
事实上还会有一个匿名函数创建出来,但是不需要我们关心
数组切片支持go语言内置的cap()函数和len()函数,cap()函数返回的是数组切片分配的空间大小,len()函数返回的是数组切片中当前所存储元素的个数
append函数
如果需要往切片的后面继续增加元素,可以使用append函数
给myslice后面增加三个元素
myslice :=append(myslice,1,2,3)
函数append()函数的第二个参数实际上是一个不定参数,我们可以根据自己的需求添加,甚至可以将一个数组切片追加到另一个数组切片的末尾
myslice2 :=[]int{8,9,10}
//给myslice后面添加myslice2
myslice =append(myslice,myslice2,…)
如果追加的长度超过了当前已分配的存储空间,数组切片会自动分配一块足够大的内存
基于数组切片创建数组切片
NewSlice :=myslice[:3]//0-2
NewSlice :=myslice[3:]//3-(len(s)-1)
NewSlice :=myslice[:]//0-(len(s)-1)
内容复制
Go语言内置copy()函数,用于将一切片的内容复制到另一切片,如果两个切片不一样大,则按照最小的切片大小进行复制
map
在go语言中,使用map不需要使用任何库,并且使用起来也方便。Map是一堆键值对的未排序组合
变量声明
var myMap map[string] aaa
创建
MyMap =make(map[string] aaa)
元素赋值
Mymap[“1234”]=aaa{“1”,”bbb”,”room…”}
元素删除
Delete(mymap,”1234”)//如果“1234”不存在,则什么都不发生,如果传入的map变量的值为nil,调用导致程序抛出异常(apnic)
查找元素
value,ok:=myMap]["1234"]
ifok{
//找到了
//dosomething
}
函数
函数定义
funcadd(a,bint)(retint,errerror){//返回值为两个
//sosth
}
funcadd(a,bint)int{//返回值为一个
//dosth
}
函数调用
函数调用需要事先导入该函数的包:
import “math”
C :=math.add(1,2)
匿名函数
在go语言里,函数就可以像普通变量一样被传递或使用,go语言支持随时在代码里定义匿名函数
匿名函数由一个不带函数名的函数声明和函数体组成
func(a,bint,zfloat64)bool{
returna*b<int(z)
}
匿名函数可以直接付给一个变量或者直接运行
f :=func(x,y int) int{
return x+y
}
func (ch chan int){
ch<- ACK
}(reply_chan)