package main
import (
"fmt"
)
func main() {
//1. 声明字符串类型的切片变量,go自动初始化为nil,长度:0,地址:0
var ss []string
fmt.Printf("length:%v taddr:%p tisnil:%v",len(ss),ss,ss == nil)
//2. 切片尾部追加元素
for i := 0; i < 10; i++ {
ss = append(ss,fmt.Sprintf("key%d",i))
}
fmt.Printf("n切片尾部追加元素:%s",ss)
fmt.Printf("nlength:%v taddr:%p tisnil:%v",ss == nil)
//3. 删除切片指定索引的元素
index := 3
ss = append(ss[:index],ss[index+1:]...)
fmt.Printf("n删除切片指定索引的元素:%s",ss == nil)
//4. 在切片中间插入元素,注意保存后面一部分的元素,必须新建一个临时temp切片
index = 5
temp := append([]string{},ss[index:]...)
ss = append(ss[:index],"key999")
ss = append(ss,temp...)
fmt.Printf("n在切片中间插入元素:%s",ss == nil)
}
调试控制台输出以下信息:
2017/06/30 18:50:46 server.go:73: Using API v1 2017/06/30 18:50:46 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug] API server listening at: 127.0.0.1:2345 2017/06/30 18:50:46 debugger.go:505: continuing length:0 addr:0x0 isnil:true 切片尾部追加元素:[key0 key1 key2 key3 key4 key5 key6 key7 key8 key9] length:10 addr:0xc42008e000 isnil:false 删除切片指定索引的元素:[key0 key1 key2 key4 key5 key6 key7 key8 key9] length:9 addr:0xc42008e000 isnil:false 在切片中间插入元素:[key0 key1 key2 key4 key5 key999 key6 key7 key8 key9] length:10 addr:0xc42008e000 isnil:false
切片之间的复制范例:
package main import ( "fmt" ) func main() { //源切片src的大小是0,使用append动态扩容到16,大小增加到10 var src = make([]string,0) for i := 0; i < 10; i++ { src = append(src,fmt.Sprintf("k%v",i)) } fmt.Printf("src(length=%d)tcap=%dt%vn",len(src),cap(src),src) //要保证目标切片dst有足够的大小,注意是大小0,而不是容量10,显然目标切片dst的大小为0,一个元素也别想被拷贝进去 var dst = make([]string,10) var copied = 0 copied = copy(dst,src) fmt.Printf("copy to dst(length=%d)tcopied=%dt%vn",len(dst),copied,dst) //目标切片dst的大小为5 dst = make([]string,5) copied = copy(dst,dst) //目标切片dst的大小为10 dst = make([]string,10) copied = copy(dst,dst) }
调试控制台输出以下信息:
2017/06/30 18:58:18 server.go:73: Using API v1 2017/06/30 18:58:18 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug] API server listening at: 127.0.0.1:2345 2017/06/30 18:58:18 debugger.go:505: continuing src(length=10) cap=16 [k0 k1 k2 k3 k4 k5 k6 k7 k8 k9] copy to dst(length=0) copied=0 [] copy to dst(length=5) copied=5 [k0 k1 k2 k3 k4] copy to dst(length=10) copied=10 [k0 k1 k2 k3 k4 k5 k6 k7 k8 k9]
切片容量的扩容规则: (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|