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)
}
上面的代码会忽略+=
运算符,因此store["bread"]
始终等于1
。我假设我错过了像#34;通过引用"这里。还有,还有更方便的方法吗?
感谢。
答案 0 :(得分:5)
您只是递增breadTotal
局部变量,而不是store
地图中的值。它应该是:
store["bread"] = breadTotal + num
您也可以这样做:
store["bread"] += num
此外,由于索引地图会返回地图中尚未存在的键的值类型的zero value(int
的零值为0
- 正确告诉没有面包) ,if
完全没必要。你可以这样做:
func breadArrived(num int) {
store["bread"] += num
fmt.Printf("%v\n", store)
}
输出(在Go Playground上尝试):
map[bread:1]
map[bread:3]
map[bread:6]
答案 1 :(得分:2)
breadTotal
变量只是map
整数值的副本,您需要将其引用为store["bread"] += num
以增加map
整数值。
https://play.golang.org/p/LQzrbSZudH
package main
import (
"fmt"
)
var store = map[string]int{}
func breadArrived(num int) {
store["bread"] += num
fmt.Printf("%v\n", store)
}
func main() {
breadArrived(1)
breadArrived(2)
breadArrived(3)
}
顺便说一下,map
整数的第一次递增是有效的,因为go将所有内容初始化为默认值,对于整数,默认值为0
。
答案 2 :(得分:-1)
简单的增量,例如C \ C ++样式:
package main
import (
"fmt"
)
var store = map[string]int{}
func main() {
store["some_key"] = 0
if _, found:= store["some_key"]; found{
fmt.Println(store["some_key"])
store["some_key"]++
fmt.Println(store["some_key"])
}
}