Go 切片
程序员文章站
2024-01-29 17:44:46
...
目录:
切片定义
切片是有数组建议的一种方便、灵活且功能强大的包装(wrapper)。切片本身不拥有任何数据,它只是对现有数组的引用
创建一个切片
- 第一种方式
package main
import "fmt"
func main() {
a:=[9]int{1,2,43}
fmt.Println(a)
// 基于数组a定义一个b切片,顾头不顾尾
b:=a[1:3]
fmt.Println(b)
}
- 第二种
package main
import "fmt"
func main() {
a := []int{1, 2, 43}
a = append(a, 1)
fmt.Println(a)
}
修改切片
切片本身不拥有任何数据。它试试底层数组的一种表示。对切片所做的任何修改都会梵音在底层数组中。
切片的长度和容量
切片的长度是切片中的元素数。切片的容量是从创建切片索引开始的底层数组中元素数
package main
import "fmt"
func main() {
a:=[5]int{1,2,43,0,0}
b:=a[1:3]
fmt.Println(len(b)) //2
//查看容量
fmt.Println(cap(b)) //4
b=append(b,10)
b=append(b,11)
b=append(b,12)
fmt.Println(len(b)) //5
//查看容量(容量如果不够了,每次都会翻倍)
fmt.Println(cap(b)) //8
}
输出结果:
// 当前切片元素个数
2
// 当前切片容量
4
// append三个元素后切片元素个数
5
// append三个元素后切片容量
8
通过make函数来初始化切片
package main
import "fmt"
func main() {
a := make([]int, 5, 10)
fmt.Println(len(a))
fmt.Println(cap(a))
a = append(a, 1)
fmt.Println(len(a))
fmt.Println(cap(a))
}
输出:
5
10
6
10
切片的函数传递类型
package main
import "fmt"
func main() {
a := make([]int, 5, 5)
fmt.Println(a)
test(a)
fmt.Println(a)
}
func test(a []int) {
a[0] = 999
fmt.Println(a)
}
结果:(引用类型)
[0 0 0 0 0]
[999 0 0 0 0]
[999 0 0 0 0]
内存优化,copy函数
当切片的底层数组很长时,可以使用copy函数来优化内存使用
可将一个切片复制到另一个切片,这样原本底层的数组可以被垃圾回收
package main
import "fmt"
func main() {
a := [10000]int{1, 2, 3, 4, 5}
b := a[0:3]
c := make([]int, 5, 5)
copy(c,b)
fmt.Println(c)
}
上一篇: php json与xml序列化/反序列化_PHP教程
下一篇: .NET Core简单注入