这是我参与「第五届青训营 」伴学笔记创作活动的第1天
1. GO变量基础
1.1 变量类型
GO的变量分为基础类型、复合类型、引用类型和接口类型。
- 基础类型:包含数值类型(如浮点数,整数等),布尔类型,字符串。
- 复合类型:包含数组,结构体。
- 引用类型:指针(常用来向函数传递大型变量的引用),切片(可以类比为C++中的vector,支持扩容)
1.2 变量声明
GO的变量声明分为一般声明和简短声明
- 一般声明格式:var 变量名字 类型 = 表达式
- 简短声明格式:变量名字 := 表达式 (编译器会自动推导变量的类型)
//一般定义一个字符串变量a,值为"Hello"
var a string = "Hello"
//简短定义一个字符串变量b,值为"world"
b := "world"
1.3 数组
1.3.1 声明
数组的声明分为仅声明和字面量赋值两种:
//仅声明一个int数组,长度为3
var a [3]int
//使用字面量初始化声明一个int数组
var b [3]int = [3]int{1, 2, 3}
1.3.2 常用方法
var b [3]int = [3]int{1, 2, 3}
//len()方法,返回数组长度,输出结果为3
fmt.Println(len(b))
1.4 切片(Slice)
切片代表一个变长的序列,其底层封装了一个数组及其有关的操作。
1.4.1 声明
切片的声明分为一般声明和使用make函数声明
//简短声明一个int切片,长度为3,序列为1,2,3
a := []int{1, 2, 3}
//make方法声明一个int切片,长度为3,元素全为默认值0
b :=make([]int,3)
1.4.2 常用方法
a := [...]int{1, 2, 3}
//append方法,在切片尾部追加元素,其值在追加后为1,2,3,4
//注意,由于底层实现在添加元素时由于容量不够可能会创建新的数组元素并返回新的引用
//所以在使用append函数时要接住返回值
a = append(a,4)
//支持切片方法,输出结果为3,4
fmt.Println(a[2:])
1.5 哈希表(Map)
它是一个无序的key-value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。
1.5.1 声明
Map的声明采用make函数来进行
//简短声明一个key为string,value为int的Map
a := make(map[string]int)
//Map支持数组式的添加元素
a["alice"]=1
1.5.2 常用方法
//声明Map并使用字面量初始化
ages := map[string]int{
"alice": 31,
"charlie": 34,
}
//delete方法 删除指定元素,输出为: map[charlie:34]
delete(ages, "alice")
fmt.Println(ages)
1.6 结构体
结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。
1.6.1 声明
需要先声明结构体类型,再声明结构体变量
//定义一个结构体类型user,包含两个成员name和password,都必须是string类型
type user struct {
name string
password string
}
//声明了一个user对象,name为"alice",password为"111"
a := user{name:"alice",password:"111"}
1.6.2 定义结构体方法
结构体支持定义其独有的方法
func (u user) checkPassword(password string) bool {
return u.password == password
}
//返回true
fmt.Println(a.checkPassword("111")