引言:
依然如昨天所说的,我本是一个Java的程序员,而go语言的语法中有很多与Java不同的,所以我就着重记录了与Java里面不同的内容
go语言语法
切片
如何理解切片呢?
- 首先是切片是数组的一个引用,它是引用类型的,而本身又是结构体,它的值是通过拷贝传递的
- 切片的长度是可以变化的,因此切片可以看作是一个可变的数组
- 切片的遍历与数组一样,也可以用内置函数len()来确定数量
- 另一个内置函数是cap,这个与len()的区别是,它求的是容量,而不是数量,。这一点就类似于Java的数组里面的求长度和求容量的区别。
- 定义方式上面,切片用 var 变量名 [] 类型的方式来定义,例如var str []string。这一点很重要,在我还没学切片之前看到切片的定义的时候,我只觉得好怪。
下面是一些切片的初始化的方式
package main
import "fmt"
func main() {
//1.声明切片
var s1 []int
if s1 == nil {
fmt.Println("是空")
} else {
fmt.Println("不是空")
}
// 2.:=
s2 := []int{}
// 3.make()
var s3 []int = make([]int, 0)
fmt.Println(s1, s2, s3)
// 4.初始化赋值
var s4 []int = make([]int, 0, 0)
fmt.Println(s4)
s5 := []int{1, 2, 3}
fmt.Println(s5)
// 5.从数组切片
arr := [5]int{1, 2, 3, 4, 5}
var s6 []int
// 前包后不包
s6 = arr[1:4]
fmt.Println(s6)
}
常用方法:
内置函数append。通过该方法往切片的尾部添加数据,然后返回一个新的slice对象
package main
import (
"fmt"
)
func main() {
s1 := make([]int, 0, 5)
s2 := append(s1, 1)
fmt.Println(s1, s2)
}
输出的是[] [1]
当超出了cap限制之后,会自动扩充,然后生成一个对象。
切片的遍历,使用range