本文主要介绍go语言中切片slice的增删修改操作。
如果我们需要往切片中追加元素,可以使用内置的append()函数。这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素。如果我们需要往一个切片中追加另一个切片,那么我们必须使用...操作符来告诉Go语言将被添加进来的切片当成多个元素。例:
s := []string{"A", "B", "C", "D", "E", "F", "G"} 
t := []string{"K", "L", "M", "N"} 
u := []string{"m", "n", "o", "p", "q", "r"} 
s = append(s, "h", "i", "j") //添加单一的值 
s = append(s, t...) //添加切片中的所有值 
s = append(s, u[2:5]...) //添加一个子切片 
b := []byte{'U', 'V'} 
letters := "WXY"
b = append(b, letters...) //将一个字符串字节添加进一个字节切片中 
fmt.Printf("%v\n%s\n", s, b) 
//--------------结果---------------------- 
[A B C D E F G h i j K L M N o p q] 
UVwxy
有时我们不仅想往切片的末尾插入项,也想往切片的前面或者中间插入项。下面的例子使用了我们自定义的 Insert() 函数,它接收一个我们要插入切片的参数、一个用于插入的切片以及需插入切片的索引位置:
func Insert(slice, insertion []interface{}, index int) []interface{} { 
    result := make([]interface{}, len(slice)+len(insertion)) 
    at := copy(result, slice[:index]) 
    at += copy(result[at:], insertion) 
    copy(result[at:], slice[index:]) 
    return result 
}
注意,如果所传入的索引位置为0,那么第一条语句中的slice[:index]为slice[:0],因此无需进行复制。类似的,如果所传入的索引位置大于等于切片的长度,则最后一条复制语句为slice[len(slice):](即一个空切片),因此也无需复制。
使用Go语言的标准切片语法可以将元素从切片的开头和末尾删除,但是将其从中间删除就费点事儿了。看看下面的例子,分别描述如何从开头,从末尾,从中间删除切片元素:
s := []string{"A", "B", "C", "D", "E", "F", "G"} 
s = s[2:] //从开始处删除是s[:2]子切片 
e := []string{"A", "B", "C", "D", "E", "F", "G"} 
e = e[:4] //从末尾处删除是e[4:]子切片
func Remove(slice []interface{}, start, end int) []interface{} { 
    result := make([]interface{}, len(slice)-(end-start)) 
    at := copy(result, slice[:start]) 
    copy(result[at:], slice[end:]) 
    return result 
} 
//--------------------另一种更为简便的写法----------------------- 
func Remove(slice []interface{}, start, end int) []interface{} { 
    return append(slice[:start], slice[end:]...) 
}
Golang通过Thrift框架完美实现跨语言调用
