Golang:在地图中设置和顺序递增值的实用方法?

Ale*_*kov 2 dictionary go

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.我想我在这里错过了"通过引用传递"这样的东西.还有,还有更方便的方法吗?

谢谢.

icz*_*cza 7

您只是递增breadTotal局部变量,而不是store地图中的值.它应该是:

store["bread"] = breadTotal + num
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

store["bread"] += num
Run Code Online (Sandbox Code Playgroud)

另外,由于索引的地图返回零值对于它们尚未在地图(零值密钥的值的类型int0-适当地告诉没有面包还),即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)