2021.04.16 Go语言学习
切片,make和new
切片
切片很好理解,就是相当于把一个相同类型的袁旭弄成可变长度的序列。内部结构包括地址,长度,容量。
var name []T
- name:表示变量名
- T:表示切片中的元素类型
make()函数构造切片
make的作用:创建一个动态切片。
make ([]T,size,cap)
- T:切片的元素类型
- size:切片中元素的数量
- cap:切片的容量
func main() {
a := make([]int, 2, 10)
fmt.Println(a) //[0 0]
fmt.Println(len(a)) //2
fmt.Println(cap(a)) //10
}
// a动态分类了一个元素数量为2,容量为10的切片。
//代码中a的内部存储空间分配了10,但是只用了2.
//容量并不会影响当前元素的个数,所以len(a)返回2,cap(a)则返回该切片的容量。
判断切片是否为空
要检查切片是否为空,请始终使用len(s) == 0
来判断,而不应该使用s == nil
来判断。
切片不能直接比较
- 切片时不能比较的。所以不能使用"=="操作来判断两个切片是否有相同元素
- 切片唯一比较的方法就是和nil比较。
切片遍历
for range就完事了
func main() {
s := []int{1, 3, 5}
for i := 0; i < len(s); i++ {
fmt.Println(i, s[i])
}
for index, value := range s {
fmt.Println(index, value)
}
}
append()方法
append函数就是给切片动态添加元素。
一次添加一个或者多个。
func main(){
var s []int
s = append(s, 1) // [1]
s = append(s, 2, 3, 4) // [1 2 3 4]
s2 := []int{5, 6, 7}
s = append(s, s2...) // [1 2 3 4 5 6 7]
}
笔记
package main
import "fmt"
func main() {
//map函数使用
var m1 map[string]int // var+关键字+map+[key的类型]+定义的类型
//map一定要初始化后才可以使用
fmt.Println(m1)
m1 = make(map[string]int,10)//要预估好map的容量,避免在程序运行期间再动态扩容
m1["年龄"] = 20
m1["ID"] = 11231415125
fmt.Println(m1)
fmt.Println(m1["ID"])
value, ok := m1["aaa"]
if !ok {
fmt.Println("chawuci")
}else {
fmt.Println("value",value)
}
//map遍历
for i, v := range m1 {
fmt.Println(i,v)
}
//只遍历key
for k := range m1 {
fmt.Println(k)
}
//只遍历value
for i := range m1 {
fmt.Println(i)
}
//删除
delete(m1,"年龄")
fmt.Println(m1)
}