數組爲值傳遞,當賦值給另一個變量的時候是將值所有都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 找到