数组为值传递,当赋值给另一个变量的时候是将值所有都copy,存一个副本,改变副本的值不会改变原有数组。slice为指针传递,改变值会改变原有slice中存的值git
数组定义后长度固定github
长度获取: len() 函数golang
全部的值类型变量在赋值,和做为参数传递时都将产生一次复制动做。数组
go数组是一个值类型,在函数体中没法修改传入的数组的内容,由于函数内操做的只是所 传入数组的一个副本数据结构
在数组中类型和长度共同肯定一个数组类型,也就是说[5]int 和[10]int 不是一个类型app
mySlice2 := []int{8, 9, 10} // 给mySlice后面添加另外一个数组切片 mySlice = append(mySlice, mySlice2...) // ... 表示散列slice, 不加编译错误.加上省略号相 7 当于把mySlice2包含的全部元素打散后传入
用于将内容从一个数组切片复制到另外一个 数组切片。若是加入的两个数组切片不同大,就会按其中较小的那个数组切片的元素个数进行 复制.函数
slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
SliceTricksurl
urlList := []string{"test", "abc", "def", "ghi"} remove := []string{"abc", "test"} for i := 0; i < len(urlList); i++ { url := urlList[i] for _, rem := range remove { if url == rem { urlList = append(urlList[:i], urlList[i+1:]...) i-- // Important: decrease index break } } } fmt.Println(urlList)
orcode
package main import "fmt" func main() { urlList := []string{"test", "abc", "def", "ghi"} remove := []string{"abc", "test"} new_list := make([]string, 0) my_map := make(map[string]bool, 0) for _, ele := range remove { my_map[ele] = true } for _, ele := range urlList { _, is_in_map := my_map[ele] if is_in_map { fmt.Printf("Have to ignore : %s\n", ele) } else { new_list = append(new_list, ele) } } fmt.Println(new_list) }
map[key] = value , 直接赋值
delete(myMap, key), 若是key不存在,则什么都不会发生,没反作用,可是若是map为nil,则panic
value, ok := map[key] ,ok 为true 找到