map[key]
是访问map元素的语法。
package main
import (
"fmt"
)
func main() {
personSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
}
personSalary["mike"] = 9000
employee := "jamie"
fmt.Println("Salary of", employee, "is", personSalary[employee])
}
上面的程序检索并打印员工jamie的工资。该程序输出Salary of jamie is 15000
。
元素不存在,返回0值
如果一个元素不存在,映射将返回该元素类型的零值。例如, 访问personSalary
映射一个不存在的元素,那么将会返回int
的0
值。
package main
import (
"fmt"
)
func main() {
personSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
}
personSalary["mike"] = 9000
employee := "jamie"
fmt.Println("Salary of", employee, "is", personSalary[employee])
fmt.Println("Salary of joe is", personSalary["joe"])
}
以上程序的输出为
Salary of jamie is 15000
Salary of joe is 0
上面的程序将joe
的工资返回为0
, 说明键joe
不存在。程序也没有报任何运行时错误。
判断元素是否存在
如果我们想知道一个键是否存在于映射中,该怎么办?
value, ok := map[key]
上面的语法用于查明某个键是否在映射中存在。如果ok
为真,则该键存在,其值存于value
中,否则该键不存在。
package main
import (
"fmt"
)
func main() {
personSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
}
personSalary["mike"] = 9000
newEmp := "joe"
value, ok := personSalary[newEmp]
if ok == true {
fmt.Println("Salary of", newEmp, "is", value)
} else {
fmt.Println(newEmp,"not found")
}
}
在上述程序中,value, ok := personSalary[newEmp]ok
中ok
值为false,因为joe
不存在。
程序会输出:
joe not found
遍历map中的元素
for
循环的range
形式可用于遍历映射中的所有元素。
package main
import (
"fmt"
)
func main() {
personSalary := map[string]int{
"steve": 12000,
"jamie": 15000,
}
personSalary["mike"] = 9000
fmt.Println("All items of a map")
for key, value := range personSalary {
fmt.Printf("personSalary[%s] = %d\n", key, value)
}
}
以上程序输出,
All items of a map
personSalary[mike] = 9000
personSalary[steve] = 12000
personSalary[jamie] = 15000
注意,在使用for range
时,不能保证每次执行程序时,从映射中检索值的顺序都是相同的。