推荐一个学习golang相关知识的资料网站,十分齐全
go学习网站
变量定义
1.单个变量:var variableName type
定义并初始化:var variableName type=value
例如:var a string="hello world"
2.多个变量:var vname1, vname2, vname3 type
定义并初始化:var vname1, vname2, vname3=v1,v2,v3
例如:var a,b,c =1,"hello",3.14
3.方法内部定义变量方式
单个: vname:=values
多个变量:vname1, vname2, vname3 := v1, v2, v3
4.常量的定义 关键字const
const constantName = value
例如:const PI=3.14125926 const a="hello"
go内置基础数据类型
1.布尔类型 bool 默认值为:false
例如:var isActive bool
2.数值类型
2.1 整数数值类型
无符号:byte, uint8, uint16, uint32, uint64
有符号:rune, int8, int16, int32, int64
其中rune是int32的别称,byte是uint8的别称
默认值均是 0
注意:这些类型的变量之间不允许互相赋值或操作
2.1 浮点数值类型
类型有float32和float64两种 默认float64 默认值均是 0
3.字符串类型 string
var s string = "hello"
Go中字符串是不可变的,不能进行如下操作 s[0]='c'
但可以进行切片操作:a:=s[2:]
字符串可以用+拼接:str:=s+"world"
原样输出字符串: 使用`` 括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出
4.枚举类型 iota
iota 这个关键字用来声明enum的时候采用,它默认开始值是0,每调用一次加1
例如:
const(
x=iota //x==0
y=iota //y==1
z=iota //z==2
w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用
)
const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0
5.数组(array)、切片(slice)、集合(map)
5.1 数组
5.1.1 一维数组
var arr [n]type 在[n]type中,n表示数组的长度,type表示存储元素的类型,其中长度也是数组的一部分,因此[3]int和[4]int是不同的类型
数组声明 var arr [10]int
a:=[3]int{1,2,3}// 声明了一个长度为3的int数组
a:=[10]int{1,2,3} //前三个元素初始化为1、2、3,其它默认为0
c := [...]int{4, 5, 6} // 省略长度
5.1.2二维数组
easyArray := [2][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}}
5.2切片(动态数组)
slice并不是真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度。
声明:var fslice []int
声明并初始化:slice := []byte {'a', 'b', 'c', 'd'}
slice := make([]type, length, cap)// length指切片的长度 cap值切片最大容量 cap>=length
slice1 := make([]int32, 10, 15)
fmt.Println(len(slice1), cap(slice1))// length=10 cap=15
slice2 := make([]int32, 10)
fmt.Println(len(slice2), cap(slice2)) // length=10 cap=10
slice:=[]int{1,2,3,4,5,6}
取切片下标在a到b范围内元素:slice[a:b] (a,b>=0&&a,b<=length(slice)-1)取出的元素包括下标a不包括下标b
a:=slice[1:3] 下标1-3 取出的元素是slice[1]=2,slice[2]=3
b:=slice[:3] 取出下标是0-3的元素slice[0]=1,slice[1]=2,slice[2]=3
c:=slice[4:] 取出下标是4到(length(slice)-1的元素slice[4],slice[5]
d:=slice[:] 取出全部元素
append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice (可能会发生扩容)
copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
5.3集合map 键值对的存储形式
声明方式一:var numbers map[string] int
声明方式二:numbers := make(map[string]int)
numbers["one"] = 1 //赋值
numbers["ten"] = 10 //赋值
numbers["three"] = 3
判断集合中是否存在某个key
value, ok := numbers["one"]// key存在ok为true,不存在为false
删除集合中的某个key元素: delete(numbers, "one")