package main
import (
"fmt"
)
var store = map[string]int{}
func breadArrived(num int) {
if breadTotal, ok := store["bread"]; ok {
breadTotal += num
} else {
store["bread"] = num
}
fmt.Printf("%v\n", store)
}
func main() {
breadArrived(1)
breadArrived(2)
breadArrived(3)
}
Run Code Online (Sandbox Code Playgroud)
上面的代码忽略了+=运算符,所以store["bread"]总是等于1.我想我在这里错过了"通过引用传递"这样的东西.还有,还有更方便的方法吗?
谢谢.
您只是递增breadTotal局部变量,而不是store地图中的值.它应该是:
store["bread"] = breadTotal + num
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
store["bread"] += num
Run Code Online (Sandbox Code Playgroud)
另外,由于索引的地图返回零值对于它们尚未在地图(零值密钥的值的类型int是0-适当地告诉没有面包还),即if是完全不必要的.你可以简单地做:
func breadArrived(num int) {
store["bread"] += num
fmt.Printf("%v\n", store)
}
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
map[bread:1]
map[bread:3]
map[bread:6]
Run Code Online (Sandbox Code Playgroud)