这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
一、Go语言特点
- 高性能、语言本身支持并发
- 语法简单、易学习
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收gc
二、Golang基础语法
1. 变量
定义方式:
var a int //a == 0
var a = 1
a := 1
注意::= 只能在函数内使用
2. 常量
常量的定义:
const 常量名 [类型] = 值
3. 判断语句
if a == 0 {
操作
}else{
操作
}
switch a {
case 1:
操作1
case 2:
操作2
...
default:
操作
}
4. 循环语句
for i := 0; i < 5; i++ {
操作
}
5. 数组
数组长度固定;定义数组时,必须给定数组长度,且必须为常量;
数组的长度也是类型的一部分,[10]int和[20]int不是同一种数据类型
6. 切片slice
切片长度可变;gopher对于切片的使用非常频繁,这里拓展一下:
切片的底层数据结构:
type slice struct {
array unsafe.Pointer //指向底层数组的指针
len int //切片长度
cap int //切片容量
}
定义一个切片时,即:使切片中的指针指向一个底层数组中的某个元素(不一定为首元素)。
cap即为从切片的起始元素到底层数组的最后一个元素间的元素个数,当切片容量不足时,便会触发
slice扩容。
len为切片中的元素个数
slice扩容:
slice 并不会自动扩充, 而是添加数据时, append函数发现添加数据后的长度超出了slice的cap
时对切片进行扩容的。
slice扩容的实质:
slice扩容机制实际上是分配一个新的底层数组,将原slice的数据拷贝到新slice(已经扩充了容量,
指向新分配的底层数组),然后把待加入的数据添加到新slice。
扩容大小规则:
一般情况下
如果原slice的容量小于1024,则新slice的容量将扩大为原来的2倍;
如果原slice的容量大于1024,则新的slice的容量将扩大为原来的1.25倍;
使用规范:
因为slice的底层数组是不可见的,在使用append对切片添加数据时,gopher通常并不知道slice
是否触发扩容机制改变了,所以要用原slice接收一下append返回的slice。
slice = append(slice, num)
7. map
在使用map之前必须给map分配(make)空间
并且map遍历出来是无序的
8. for range
接收两个参数:
for k, v := range arr {
操作1
}
k:索引值
v:元素值
接收一个参数:
for k := range arr {
操作2
}
k:索引值
9. 时间格式
固定格式:2006-01-02 15:04:05