1.簡介
map 是 golang 中的方便而強大的內建資料結構,是乙個同種型別元素的無序組,元素通過另一型別唯一的鍵進行索引。其鍵可以是任何相等性操作符支援的型別, 如整數、浮點數、複數、字串、指標、介面(只要其動態型別支援相等性判斷)、結構以及陣列。 切片不能用作對映鍵,因為它們的相等性還未定義。與切片一樣,對映也是引用型別。 若將對映傳入函式中,並更改了該對映的內容,則此修改對呼叫者同樣可見。未初始化的對映值為 nil。
使用示例如下:
package main
impoxadjcrlrt "fmt"
func main()
for k, v :=range nameage
}輸出結果:
v= 19
v= 19 ok= true
tom 19
2.注意事項
2.1 map的元素不可取址
map中的元素並不是乙個變數,而是乙個值。因此,我們不能對map的元素進行取址操作。
var m = map[int]int
func main()
執行報錯:
cannot take the address of m[0]
因此,當 map 的元素為結構體型別的值,那麼無法直接修改結構體程式設計客棧中的字段值。考察如下示例:
package main
import (
"fmt"
)type person struct
func whoisdead(personmap map[string]person)
} }func main()
p2 := person
p3 := person
personmap := map[string]person
whoisdead(personmap)
for _, v :=range personmap
} }
編譯報錯:
cannot assign to struct field personmap[name].isdead in map
原因是 map 元素是無法取址的,也就說可以得到 personmap[name],但是無法對其進行修改。解決辦法有二,一是 map 的 value用 strct 的指標型別,二是使用臨時變數,每次取出來後再設定回去。
(1)將map中的元素改為struct的指標。
package main
import (
"fmt"
)type person struct
func whoisdead(people map[string]*person)
} }func main()
p2 := &person
p3 := &person
personmap := map[string]*person
whoisdead(personmap)
for _, v :=range personmap
} }
輸出結果:
px is dead
(2)使用臨時變數覆蓋原來的元素。
package main
import (
"fmt"
)type person struct
func whoisdead(people map[string]person)
} }func main()
p2 := person
p3 := person
personmap := map[string]person
whoisdead(personmap)
for _, v :=range personmap
} }
輸出結果:
px is dead
2.2 map併發讀寫問題
共享 map 在併發讀寫時需要加鎖。先看錯誤示例:
package main
import (
"fmt"
"time"
)var m = make(map[int]int)
func main()
}()
//乙個go程讀map
go func()
}()
time.sleep(time.second*20)
}執行報錯:
fatal error: concurrent map read and map write
可以使用讀寫鎖(sync.rwmutex)實現互斥訪問。
package main
import (
"fmt"
"time"
"sync"
)var m = make(map[int]int)
var rwmutex sync.rwmutex
func main()
rwmutex.unlock()
}()
//乙個go程讀map
go func()
rwmutex.runlock()
}()
time.sleep(time.second*20)
}正常執行輸出:
01...
9999
使用Calendar需要注意clear
date是前台傳的值,格式為2014 01 01的形式 如下的 是去date日期當月的最大天數日期 int month integer.parseint date.substring 5,7 取天數 int year integer.parseint date.substring 0,4 取年份 d...
使用SqlSession 需要注意的
sqlsessionfactorybuilder 是用於建立sqlseesionfactory的,將sqlsessionfactorybuilder當成乙個工具類來使用 sqlseesionfactory 會話工廠,是乙個單例的,用於建立sqlsession,sqlsessionfactory一旦建...
constraintlayout 需要注意的事項
橫向和豎向至少都需要設定乙個約束條件,但是實際上下左右都是可以設定約束條件的。仔細觀察android studio 預設的建立專案的textview 如果上下左右都設定了約束條件就會產生邊距。劃重點 相同方向的屬性,比如說top to top 這樣的,實際上可以理解為是relativelayout中...