我有一个从字符串到整数的映射,我想通过从标准输入读取键来选择一个值。很简单,你可能会说: package main import ( "os" "bufio" "fmt" ) func main() { m := map[string]int { "Hello": 1, "Map": 2, } reader := bufio.NewReader(os.Stdin) text, err := reader.ReadString('\n') if err != nil { fmt.Println("Error", err) return } fmt.Println(m[text]) }当向控制台写入“Hello”时,会打印出 0,而不是 1。
2 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
如果我猜的话,使用reader.ReadString将用户输入附加到\n. 所以这个text领域最终是Hello\n
使用budio.NewScanner()修复了这个问题:
func main() {
m := map[string]int{
"Hello": 1,
"Map": 2,
}
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
text := scanner.Text()
fmt.Println(m[text])
}
输出:
$ go run main.go
Hello
1
慕无忌1623718
TA贡献1744条经验 获得超4个赞
从文档:
ReadString 读取直到输入中第一次出现 delim ,返回一个包含数据的字符串,直到并包括 delimiter。
如果您对字符串进行切片并删除最后一个字符,它应该可以工作:
fmt.Println(m[text[:len(text)-1]])
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消