我尝试使用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.这段代码有什么问题?
答案 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]
你有什么不同的做法?