-
复杂数据类型
-
指针:
var ptr *int=&age
接收数据时可以x,_ //即第二个返回值为忽略
- 数组:
var 数组名 【n】类型
for range循环
for key,value := range coll{
}
1.coll就是你要遍历的内容
2.每次遍历得到的索引用key接受,每次遍历得到的索引位置上的值用val
3.key value的名字可以随便起
4.key value 都是单次循环的临时变量
四种数组开始时赋值
- var arr1 【3】int =【3】int{3,6,9}
- var arr2=【3】int {1,4,7}
- var arr3=【...】int{4,5,6,7}
- var arr4=【...】int{2:66,0:33,1:99,3:88}
- 切片
//动态的,不写长度
slice := 数组名【1:3】 //slice为数组中1-2 (不包含3)
包含指向底层数组的指针
切片的长度!=切片的容量
//切片不能越界
//切片可以再次切片
三种定义方法:
1.先建立一个数组,再用数组赋值切片
2.用make内置方式 //make底层创建数组,通过slice间接
var 切片名 【type =make(【】,len,【cap】)】
slice := make(【】数据类型,长度,容量)
3.直接定义一个slice
slice :=【】数据类型,长度,容量
简写方式
var slice=arr[0:end] -> var slice=arr[ :end]
var slice=arr[start:len] -> var slice=arr[start:]
var slice=arr[0:len] -> var slice=arr[:]
append 增加元素 //底层新建一个新数组,返回一个新切片
- map(映射)
//将键值对进行关联
key - value
var map 变量名 map【keytype】valuetype
//slice map function 不可以被使用
只声明map并没有被分配内存空间,需使用make
a = make(map【int】string,10)
特点:
1.map集合使用前一定要make
2.map的key-value是无序的
3.key是不可以重复的,重复的后一个替换前一个
4.value是可以重复的
map的创建方式
1.默认
-
b := make(map【int】string)
-
c :=map【int】string{
//填入数据
}
delete:(map名,key)
查找: value,bool :=map【key】
**长度:**len
遍历://只有一种
forrange
for k,v := range b{
}:(map名,key)
-
语法
-
1. if else语句
if后面没有(),直接写条件
- 2. switch语句
(1)不需要在每一个case语句后面break,实现一个条件后自动break
(2)若switch后不加判断条件x,而是直接在case精后面加判断条件,则相当于多个if else嵌套的清晰易懂
(3)case可以用,将多个值分隔开
(4)fallthrough case穿透,对符合的case,对下一个case也输出
- go中只存在for循环
break :结束最近的一个循环,也可以在循环前添加标签,break 标签来结束哪个循环
-
函数
func 函数名 (参数)(返回值){ //返回值若只有一个类 型,括号可以省略
}
若无返回值 则不填任何类型即可
函数名命名和变量命名规则一致
函数不能重载
可变参数
args...类型
这种类型的函数,可以传0-n个参数,内部是当作切片来处理
数组
切片
-
获取用户终端输入
scanf //需要用特定类型来输入 用空格来分割
fmt.Scanf("%d %s %f ",&age,&name,&score)
scanln
fmt.Scanln(&age) //传入的是地址,且输入数据类型和变量类型需一致
-
思考与感悟
这篇笔记将go的复杂数据类型以及函数做了一些叙述,经过此次的梳理,我已经对go的学习有了更深一步的了解,希望我能坚持下去,在剩下的日子里把go语言学得更好,加油!