一、map(集合)
1.定義:
map 是一種無序的鍵值對的集合。通過 key 來快速檢索資料,key 類似於索引,指向資料的值。我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的。
2.map的建立
語法:
//宣告變數,預設 map 是 nil
varmap1 map[key_data_type]value_data_type
//使用 make 函式
map2 := make(map[key_data_type]value_data_type)
例子:
//通過宣告變數
package main
import
"fmt
"func main()
}
3、元素操作
新增:方法與陣列的一樣
package mainimport
"fmt
"func main()else
//插入值
a[1]="cc"
a[2]="bb"
//取乙個不存在的key值會返回value值的值
//無
//建立乙個新的map,判斷值是否存在用ok
var b map[int]int=make(map[int]int
) b[
1]=100
fmt.println(b)
//map[1:100]
fmt.println(b[9]) //
0if v,ok:=a[9
];ok
else
v,ok:=a[1
] fmt.println(v)
//cc
fmt.println(ok) //
ture
//定義和初始化的第二種方式
//var a =map[int]string
////a[1]
}
刪除:語法是 [delete(map, key)]。這個函式沒有返回值。
package mainimport (
"fmt")
func main()
//給map新增元素
personsalary["
mike
"] = 9000
fmt.println(
"map before delete
", personsalary) //
map before delete map[jamie:15000 mike:9000 steve:12000]
delete(personsalary, "
steve")
fmt.println(
"map after delete
", personsalary) //
map after delete map[jamie:15000 mike:9000]
}
4、獲取map的長度:len(map名),長度為k:v鍵值對的個數
5、map同樣也是引用資料型別
和 [slices]切片類似,map 也是引用型別。當 map 被賦值為乙個新變數的時候,它們指向同乙個內部資料結構。因此,改變其中乙個變數,就會影響到另一變數。
package mainimport
"fmt
"func main()
test1(a)
fmt.println(a)
//上面執行了函式test1(),資料已經被修改,map[1:888 2:100]
}func test1(a map[
int]string
)
6、map的相等性
map 之間不能使用==
操作符判斷,==
只能用來檢查 map 是否為nil
。
package mainfunc main()
//map2 := map1
//if map1 == map2
//map迴圈出所有元素
//var a =map[int]string
////for i:=0;i
<=len(a);i++
////map是無序的
//for k,v:=range a
}
二、字串
1.定義
go 語言中的字串是乙個位元組切片。go 中的字串是相容 unicode 編碼的,並且使用 utf-8 進行編碼。go中的string字串的形式都是以utf-8的形式存入記憶體中,而其他語言以unicode萬國碼形式。
字串是不可變的,go 中的字串是不可變的。一旦乙個字串被建立,那麼它將無法被修改。字元只能讀取,不支援修改。
2、編碼方式介紹
package mainimport (
"fmt""
unicode/utf8")
func main()
//for _,v:=range name
//name := "name李"
//name[0]=99
byteslice := byte//
列印的是位元組數
str := string
(byteslice)
a:=len(str)
b:=utf8.runecountinstring(str)
fmt.println(b) //4
fmt.println(a) //
5 fmt.println(str) //
café
}
三、指標
1.定義
指標是一種儲存變數記憶體位址(memory address)的變數。
2.型別宣告
指標變數的型別為 *t,該指標指向乙個 t 型別的變數。 //&取位址符號 //
* 放在型別旁邊,表示指向這個型別的指標 //
* 放在變數旁邊,取出指標指向的具體值。表示解引用(反解)
3、演示
import "fmt"
func main()
4、指標的零值:零值是nil
。
package mainimport
"fmt
"func main()
5、向函式傳遞指標引數
package mainimport
"fmt
"func change(val *int
) func main()
注意:不要向函式傳遞陣列的指標,而應該使用切片。假如我們想要在函式內修改乙個陣列,並希望呼叫函式的地方也能得到修改後的陣列,一種解決方案是把乙個指向陣列的指標傳遞給這個函式。
package mainimport
"fmt
"func main()
func test9(a *[4]int
) func test10(a
int)
go不支援指標運算
//下面這種是不允許的
package main
func main()
p := &b
p++}
go語言之 map集合
map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的 下面看具體例項 pac...
C語言之字串與指標
1 字串的儲存與訪問 字串的訪問 char str n 第i個字元 str i 思考?以下寫法是否正確?char s1 n s1 welcome s1 welcome 錯誤!必須逐一賦值或使用函式,且陣列長度要足夠大。可以使用字元指標解決 char s s welcome 或 char s welc...
Go語言之指標
每個變數在執行時都擁有乙個位址,這個位址代表變數在記憶體中的位置。go語言中使用 字元放在變數前面對變數進行 取位址 操作,這一點與c c 是一樣的。go語言中的值型別 int float bool string array struct 都有對應的指標型別,如 int int64 string等。...