if-else语句的判断语句不需要加小括号
循环语句
- 只有唯一一个循环语句——for
- 可写可不写循环条件语句;
- 可用continue继续循环,break跳出循环
分支语句switch
- 默认不需要加break语句,一个分支执行结束后,自动跳出分支语句;
- 可以使用任意数据类型,包括字符串,结构体等等;
数组Array
- 长度固定
- 数据类型相同
- 内存空间是连续的
切片Slice(可变长度的数组)
定义:切片是对连续内存片段的引用,可以包括整个数组,但不包括终止索引
主要用于快速操作一块数据集合
- 可使用make函数来构建切片
s := make([]string,3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
- 可使用内建函数append添加元素,但追加元素必须赋值给元素组
s = append(s,"d")
- append既可以在尾部添加元素,也可以在头部添加元素,在头部添加元素时会重新分配内存,对比在尾部添加元素性能较差
var a = []int{1,2,3}
a = append([]int{0},a...)
a = append([]int{-2,-3,-1},a...)
- 切片内存大小不够时会按容量大小的2倍自动进行扩容,
map是基于Key-Value的数据结构
- 使用make创建map
m := make(map[string] int)
m["one"] = 1
m["two"] = 2
- 使用delete删除map
delete(m,"one")
- 判断k-v是否存在
value, ok := map[key]
range遍历有两个参数,参数一是索引,参数二是索引对应的值
for k, v := range m {
fmt.Println(k, v)
}
指针
定义:*(星号)符号表示,指针存储变量的地址
作用:主要用于更改函数参数的值
- 指针的零值是nil
- 指针不支持算术运算
- 指针指向类型不能随意更改
- 不支持常量指针和指针常量
- 两个指针只有满足特定条件才可以进行比较
结构体struct
定义:封装多个基本数据类型,实现单一数据类型不能满足的需求
- 可初始化全部结构体变量
- 可对单一变量进行初始化,未初始化的变量值为空值
- 结构体.变量名 实现结构体变量的读和修改
- 非结构体指针形式作为函数的参数时是值传递,在函数中的操作不会影响原结构体;结构体指针作为函数的参数是是引用传递,在函数中的修改会直接影响到原结构体
type user struct{
name string
password string
}
a := user{name: "wang", password: "1024"}
b := user{name: "wang"}
c := user{"wang","1024"}
a.name 读写结构体的值
//结构体可作为函数的参数,指针参数可用来修改值
结构体方法
定义:结构体方法是一种与特定关联的函数
既是函数又是结构体,因此也有结构体指针和非结构体只针对参数,或者叫值接收器方法,指针接收器方法。
type user struct{
username string
password string
}
func (u user) checkPassword(password string) bool {
return u.password = password
}
a.checkPassword("2024")
错误处理
- 通过返回error类型的值来实现
- 错误只能是字符串类型
- 尽管可以预判错误,但错误信息不具体
字符串操作
- 字符串是不可变的,可将字符串转化为[]byte,然后再转化为string
- 无论是哪种转换,都会重新创建字符串
- 可以使用双引号或反引号包含字符序列,从而创建字符串
- 使用“+”拼接字符串
- len()获取字符串长度,Split()分割字符串,Replace()替换字符串等等
字符串格式化
使用Printf这样的格式化函数来格式化字符串
- %s 字符串类型
- %d 整型
- %f 浮点型,%.2f保留两位小数
- %t 布尔型
- %v 通用类型,表示任意类型的变量;%+v 可得到字段名和值,%#v 可得到结构体构造的类型名称和值
JSON处理
- 结构体序列化为JSON,需将结构体中每个字段名的首字母,再使用json.Marshal()函数即可
- Go的大多数数据类型都可以转化为JSON,,但channel、complex和函数除外
- 转化前数据结构出现了指针,会将指针转化成指针所指向的值;如果指针指向的是零值,会转化为nil
- 可使用json.Unmarshal()函数将JSON文本解码为Go里面预期的数据结构
- 如果解码未知的JSON,只需将解码后的JSON数据输出到一个空接口
时间处理
- time.Now()获取当前时间;Sub()对两段时间做减法得到时间段;Format函数将时间格式化为某种字符串形式
- now.Unix()将当前时间转换为时间戳
数字解析
- 使用strconv.Atoi()函数将字符串转化为数字
- 使用strconv.Itoa()函数将数字转化为字符串
进程信息
- os.Args获取命令行进程参数
- os.Getenv获取环境变量
- os.Setenv设置环境变量