《Effective Go》--Maps
Map是一種方便,強大的內建資料結構,其將一個型別的值(key)與另一個型別的值(element或value) 關聯一起。key可以為任何定義了等於操作符的型別,例如整數,浮點和複數,字串,指標,介面(只要其動態型別支援等於操作),結構體和陣列。切片不能 作為map的key,因為它們沒有定義等於操作。和切片類似,map持有對底層資料結構的引用。如果將map傳遞給函式,其對map的內容做了改變,則這 些改變對於呼叫者是可見的。
Map可以使用通常的複合文字語法來構建,使用分號分隔key和value,這樣很容易在初始化的時候構建它們。
var timeZone = map[string]int{
"UTC": 0*60*60,
"EST": -5*60*60,
"CST": -6*60*60,
"MST": -7*60*60,
"PST": -8*60*60,
}
賦值和獲取map的值,在語法上看起來跟陣列和切片類似,只不過索引不需要為一個整數。
offset := timeZone["EST"]
嘗試使用一個不在map中的key來獲取map值,將會返回map中元素相應型別的零值。例如,如果map包含的是整數,則查詢一個不存在的key將會返回0。
package main
import (
"fmt"
)
func main() {
var timeZone = map[string]int{
"UTC": 0*60*60,
"EST": -5*60*60,
"CST": -6*60*60,
"MST": -7*60*60,
"PST": -8*60*60,
}
t1 := timeZone["EST"]
fmt.Println(t1)
t2 := timeZone["EST111111"]
fmt.Println(t2)
}
輸出結果:
有時你需要區分開沒有的項和值為零的項。是否有一個項為”UTC”,或者由於其根本不在map中,所以為空字串?你可以通過多賦值的形式來進行辨別。
var seconds int
var ok bool
seconds, ok = timeZone[tz]
這被形象的稱作為“comma ok”用法。在這個例子中,如果tz存在,seconds將被設定為適當的值,ok將為真;如果不存在,seconds將被設定為零,ok將為假。這有個例子,並增加了一個友好的錯誤報告:
func offset(tz string) int {
if seconds, ok := timeZone[tz]; ok {
return seconds
}
log.Println("unknown time zone:", tz)
return 0
}
如果只測試是否在map中存在,而不關心實際的值,你可以將通常使用變數的地方換成空白識別符號(_)
_, present := timeZone[tz]
要刪除一個map項,使用delete內建函式,其引數為map和要刪除的key。即使key已經不在map中,這樣做也是安全的。
delete(timeZone, "PDT") // Now on Standard Time
本文整理自:https://www.kancloud.cn/kancloud/effective/72207
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- 《Effective Go》--deferGo
- 《Effective Go》--空白識別符號Go符號
- 2.3.7 Container MapsAI
- Google Maps 的故事Go
- 《Effective C#》C#
- effective java (轉)Java
- 谷歌服務:Google Maps JavaScript API谷歌GoJavaScriptAPI
- Summary Functions and Maps(pandas學習三)Function
- Effective Oracle by DesignOracle
- effective C++ : CHAPTER 8C++APT
- Effective C++筆記C++筆記
- effective java 觀後感Java
- 【Effective Modern C++】索引C++索引
- Effective Java(四) 泛型Java泛型
- 《Effective C++》筆記C++筆記
- Elevate Your Lead Generation Game with Maps Scraper AIGAMAI
- GeoLayout: Geometry Driven Room Layout Estimation Based on Depth Maps of PlanesOOM
- Effective Java 讀書筆記Java筆記
- [心得] Effective Java心得筆記Java筆記
- Errata in Effective Java Second EditionJava
- Effective Oracle by Design筆記Oracle筆記
- C++::My Effective C++C++
- Effective C++: Item 32 (轉)C++
- Effective C++: Item 21 (轉)C++
- Effective C++: Item 24 (轉)C++
- effective C++筆記1C++筆記
- 地圖熱點 jquery.image-maps.js 的使用地圖jQueryJS
- Mac上如何讓Bootstrap Studio中使用Google MapsMacbootGo
- Google Maps開始支援360度全景街道風光了Go
- 《Effective-Ruby》讀書筆記筆記
- 《Effective Java》--Java進階必備Java
- Effective Object C 2.0 『熟悉Object C』Object
- Effective Python學習筆記Python筆記
- Effective C++ 35,36,37C++
- Effective Java 讀書筆記(2)Java筆記
- 理解NSCopying--Effective筆記筆記
- 《Effective C#》讀書筆記C#筆記
- Java Puzzlers & Effective Java - Book SharingJava