Golang 如何在切片尾部追加元素,又如何删除切片指定索引的元素,以及如何在切片中间插入元素,还有切片之间的复制

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=%d\t%v\n",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=%d\t%v\n",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]


切片容量的扩容规则:

相关文章

类型转换 1、int转string 2、string转int 3、string转float ...
package main import s &quot;strings&quot; import...
类使用:实现一个people中有一个sayhi的方法调用功能,代码如...
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件...
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http:...