go slice 使用
golang slice 使用样例
package main
import (
"fmt"
"testing"
"unsafe"
)
/*
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,
Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),
与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
你可以声明一个未指定大小的数组来定义切片:
var identifier []type
切片不需要说明长度。
或使用make()函数来创建切片:
var slice1 []type = make([]type, len)
也可以简写为
slice1 := make([]type, len)
也可以指定容量,其中capacity为可选参数。
make([]T, length, capacity)
这里 len 是数组的长度并且也是切片的初始长度。
*/
func TestSlice0(t *testing.T) {
p := []int{2, 3, 5, 7, 11, 13}
fmt.Println("p ==", p)
fmt.Println("p[1:4] ==", p[1:4])
// 省略下标代表从 0 开始
fmt.Println("p[:3] ==", p[:3])
// 省略上标代表到 len(s) 结束
fmt.Println("p[4:] ==", p[4:])
}
func TestSlice1(t *testing.T) {
var a []int
printSlice("a", a)
// append works on nil slices.
a = append(a, 0)
printSlice("a", a)
// the slice grows as needed.
a = append(a, 1)
printSlice("a", a)
// we can add more than one element at a time.
a = append(a, 2, 3, 4)
printSlice("a", a)
}
func TestSlice3(t *testing.T) {
var balance0 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} //数组
balance0[0] = 100.0
balance1 := balance0[:] //切片,是数组balance0的引用
balance1[0] = 101.0
var balance2 = []float32{1000.0, 2.0, 3.4, 7.0, 50.0} //切片
balance2[0] = 102.0
fmt.Println(balance0, "\n", balance1, "\n", balance2)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x)
}
func TestSliceAndArray(t *testing.T) {
a := [...]int{1, 2, 3, 4, 5, 6}
fmt.Println("star deal array, orginal data is:")
fmt.Println(a)
aMaxIndex := len(a) - 1
fmt.Printf("aMaxIndex:%d\r", aMaxIndex)
for i, e := range a {
if i == aMaxIndex {
a[0] += e
fmt.Printf("index is 0, val is :%d\r", a[0])
} else {
a[i+1] += e
fmt.Printf("index is:%d ,val is :%d\r", i+1, a[i+1])
}
}
fmt.Println("deal result is:")
fmt.Println(a)
s := []int{1, 2, 3, 4, 5, 6}
fmt.Println("star deal slice, orginal data is:")
fmt.Println(s)
sMaxIndex := len(s) - 1
fmt.Printf("aMaxIndex:%d\r", sMaxIndex)
for i, e := range s {
if i == sMaxIndex {
s[0] += e
fmt.Printf("index is 0, val is :%d\r", s[0])
} else {
s[i+1] += e
fmt.Printf("index is:%d ,val is :%d\r", i+1, s[i+1])
}
}
fmt.Println("deal result is:")
fmt.Println(s)
}
func TestSliceCap(t *testing.T) {
//说先定义一个切片,只限定长度为1
s := make([]int, 1)
//打印出slice的长度,容量以及内存地址
fmt.Printf("len :%d cap:%d array ptr :%v \n", len(s), cap(s), *(*unsafe.Pointer)(unsafe.Pointer(&s)))
for i := 1; i < 1024*2; i++ {
s = append(s, i)
fmt.Printf("len :%d cap:%d array ptr :%v \n", len(s), cap(s), *(*unsafe.Pointer)(unsafe.Pointer(&s)))
}
//打印出slice
fmt.Println("array:", s)
}
测试
执行测试代码 go test -v slice_test.go
可以查看执行结果
go test 使用请看:go test 使用
golang 使用样例汇总:go test
你可能感兴趣的文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦