Go语言发展简史
2007年,谷歌工程师Rob Pike, Ken Thompson和Robert Grisemer开始设计一门全新的语言,这是Go语言的最初原型。
2009年11月,Google将Go语言以开放源代码的方式向全球发布。
2015年8月,Go1.5版发布,本次更新中移除了”最后残余的c代码”
2017年2月,Go语言Go 1.8版发布。
2017年8月,Go语言Go 1.9版发布。
2018年2月,Go语言Go1.10版发布。
2018年8月,Go语言Go1.11版发布。
2019年2月,Go语言Go1.12版发布。
2019年9月,Go语言Go1.13版发布。
2020年2月,Go语言Go1.14版发布。
2020年8月,Go语言Go1.15版发布。
….一直迭代
Go语言的吉祥物 - 金花鼠Gordon。
数据类型
基本类型转string类型
方式1:fmt.Sprintf(“%参数”,表达式)
方式2:使用strconv包的函数
string类型转基本类型
strconv.ParseBool()
strconv.ParseInt()
strconv.ParseFloat()
指针
指针就是内存地址
& 取内存地址
- 根据地址取值
指针变量的地址不可以不匹配1
2
3
4
5
6var age int = 18
var ptr *int = &age
fmt.Println(ptr)
fmt.Println("ptr本身这个存储空间的地址为:",&ptr)
//想获取ptr这个指针或者这个地址指向的那个数据:
fmt.Printf("ptr指向的数值为:%v",*ptr) //ptr指向的数值为:18
函数
- init函数
初始化函数,可以用来进行一些初始化的操作
每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用。
- 闭包
闭包就是一个函数和与其相关的引用环境组合的一个整体
- defer关键字
为了在函数执行完毕后,及时的释放资源
遇到defer关键字,会将后面的代码语句压入栈中,也会将相关的值同时拷贝入栈中,不会随着函数后面的变化而变化。
- 可变参数
1 | /定义一个函数,函数的参数为:可变参数 ... 参数的数量可变 |
- 基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值
如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果来看类似引用传递
数组
var 数组名 [数组大小]数据类型
切片
可变数组
- 定义切片
1
2
3
4
5
6
7
81、引用一个创建好的数组
var arr [4] int = [3]int{1,2,3,4}
slice := arr[1:3]
2、make内置函数
var切片名[type = make([], len,[cap])
slice := make([]int,4,20)
3、直接指定具体的数组
slece := []int{1,2,3} - len cap
1 | slice := make([]int, 10) |
可以看出
len 计算的是当前数组元素的个数,
cap计算的是当前切片开始位到数组最后一个元素的个数
通过函数传递的时候 实际上传递的是底层的数组 所以当函数内部的slice如果发生扩容的话 将和外部的slice彻底成两个独立的slice
结构体
//定义老师结构体,将老师中的各个属性 统一放入结构体中管理:
1 | type Teacher struct{ |