基础数据类型描述
go不支持任何类型的隐式转换 所有的都必须显式转换
支持指针类型变量访问内存空间,但是指针不支持指针运算
字符串是值类型 默认是空字符("")不是空对象nil
函数支持多个返回值
if支持两段的语法格式
if res,err := func(); err==nil { }else{ }
数组结构和切片结构
切片数据结构
len的增长规模是增加一个元素+1
cap的增长规模是cap*2的增长
len表示的是切片结构中可以访问的元素个数(已经被初始化)
cap表示的是切片结构可以容纳元素的总个数
切片和数组的区别
切片在使用上就是一个可变长度的数组,通过cap实现动态扩容存储容量
切片结构共享后端存储内存空间 当后端存储空间进行扩展的时候会创建一个新的连续存储空间并且把原来存储空间的值全部拷贝到新的空间中(s=append(s,100))
任何一个引用修改值都会影响到其他引用对应的值
map类型结构
判断map中是否存在3这个key 用来区分map中key不存在和key存在但是值设置为0。if v,ok:=m1[3];ok{}else{}
map的值可以是一个函数
字符串类型
string是一个byte数组 string的byte数组可以存储任何类型的数据(任何类型的数据都可以转换成二进制格式表示)
函数类型
一等公民。函数可以作为变量的值,函数可以作为参数和返回值
所有的参数都是值传递 参数的结构是会被全部复制的,但是复制后的参数里包含的指针和参数源对象中的指针指向的是同一个内存空间
可变长参数
参数个数不确定 但是所有参数的类型是一致的
ret :=0 定义并初始化一个变量
ret =1 给ret赋值
func Sum(ops ...int) int{} 函数体前面必须加上函数的返回值类型
defer延迟执行
相当于try catch finally 中的finally用途,用于在函数执行完成时在函数返回之前清理某些资源或者释放锁对象。
不管调用函数的时候是不是发生异常最后都会被执行延迟代码代码
错误处理机制
1.没有异常机制
及早判断异常并返回 。 在函数中先判断并处理异常操作,最后处理正常情况.使代码变得清晰可读
2.panic和os.Exit退出的区别
panic异常退出的时候会调用defer指定函数 os.Exit退出时候不会调用
os.Exit退出时不输出当前调用栈信息 panic退出会输出堆栈信息
基本运算符操作
字符串和字符编码
字符串转义符
\b 退格 删除前面一个字符
\n 换行 前后内容在不同的行输出
\r 回车 把光标移动到当前行的开始位置重新输出
\t 制表符 相隔的间距是一致的输出内容
字符串和数字的转换
数组和切片
切片是获取数组中的子数组 切片是不可比较的
切片中元素的地址和原数组中元素的地址是同一块内存
[3]int {1,2,3} [...]int {1,2,3} 数组定义
[]int {1,2,3} 切片定义
定义数组的时候必须设置数组的长度,没有定义长度的情况就是切片定义
map和结构体
map和切片一样默认本身不能进行比较,需要自己编写函数循环读取元素进行比较