在 go 的世界中,沒有 array 這個 keyword ,只有 slice 跟 map
map 有 key / value 的概念
先來說說 slice
之前我們遇到的變數皆為獨特的、單一的,當想要操作多個類似結構的資料時,在 computer science 中,可以用集合來操作多個同一類型的結構,也可以透過 loop 來處理重複性的工作。
可以把 slice 想像成一排藥盒,每個格子中儲存一個資料。slice 的限制在於『只能儲存同一種類型』的資料,而且建立後長度不能改變。
宣告一個長度為 4 ,屬性為 string 的 slice
func main() {
var langs [4]string
langs[0] = "Go"
langs[1] = "GoWorker"
langs[2] = "GoHttp"
langs[3] = "GoServer"
fmt.Println(langs)
}
slice 的 index 是從 0 開始,而非從 1 開始
或者 ... 可以用語法糖的方式同時宣告&賦值
func main() {
langs := [4]string{
"Go",
"GoWorker",
"GoHttp",
"GoServer",
}
fmt.Println(langs)
}
遍歷 for range
Go 的 for 迴圈可以使用 for range 掃過所有元素。
func main() {
langs := [4]string{
"Go",
"GoWorker",
"GoHttp",
"GoServer",
}
for k, v := range langs {
fmt.Println(fmt.Sprintf("%d: %s", k, v))
}
}
如果不需要 index ,可以使用底線 _ 代替:
for _, v := range langs {
fmt.Println(e)
}
使用 for k,v := range 時,直接修改 v 的值是沒有效果的
for _, e := range arr {
e = e * e
}
// nothing happened
for _, e := range arr {
fmt.Println(e)
}
把『要修改得值』 塞到指定的位置 才能做到改動
arr := [5]int{1, 2, 3, 4, 5}
for i := 0; i < len(arr); i++ {
arr[i] = arr[i] * arr[i]
}
for _, e := range arr {
fmt.Println(e)
}
golang 還是有 array 吧?
有帶長度的,都是 array
記憶體的配置方式應該不同
感謝提醒 我修正一下 .... 沒有 array 這個 『keyword』
這樣的話
x := [4]string
y := []string
x 是 array
y 是 slice
應該是這樣吧?
指定長度的 slice 可以稱作為 array
我自己是比較常用 y := []string 的方式
另外在宣告時後面要加上{}