Go:地图中的整数始终为0

时间:2015-11-12 20:22:42

标签: go

我尝试使用map[string]int计算Go中测试中的元素,但我的地图中的值始终为0

var counts = make(map[string]int)

func mockCheckTokenExists(counts map[string]int) func(token string) (bool, error) {
    return func(token string) (bool, error) {
        fmt.Println("count: ", counts[token])

        if token == tokenPresent0Times {
            return false, nil
        } else if token == tokenPresent1Times && counts[tokenPresent1Times] == 1 {
            return false, nil
        }
        counts[token]++;
        return true, nil
    }
}

这个函数返回的函数作为参数传递给另一个函数。

在每次调用时打印计数时,它们始终为0.这段代码有什么问题?

1 个答案:

答案 0 :(得分:4)

您尚未向我们提供可重现的示例:How to create a Minimal, Complete, and Verifiable example.

这似乎有效,

package main

import "fmt"

var counts = make(map[string]int)

var tokenPresent0Times, tokenPresent1Times string

func mockCheckTokenExists(counts map[string]int) func(token string) (bool, error) {
    return func(token string) (bool, error) {
        fmt.Println("count: ", counts[token])
        if token == tokenPresent0Times {
            return false, nil
        } else if token == tokenPresent1Times && counts[tokenPresent1Times] == 1 {
            return false, nil
        }
        counts[token]++
        return true, nil
    }
}

func main() {
    fn := mockCheckTokenExists(counts)
    fn("atoken")
    fn("atoken")
    fmt.Println(counts)
}

输出:

count:  0
count:  1
map[atoken:2]

你有什么不同的做法?