从stdin读取映射键



我有一个从字符串到int的映射,我想通过从stdin读取键来选择一个值。很简单,你可以说:

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])
}

当写";你好"到控制台,这会打印出0,而不是1。

如果我猜测,使用reader.ReadString会在用户输入中添加n。因此text字段最终为Hellon

使用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

来自文档:

ReadString读取直到输入中第一次出现delim,返回一个字符串,该字符串包含到的数据,包括分隔符

如果你将字符串切片并删除最后一个字符,它应该可以工作:

fmt.Println(m[text[:len(text)-1]])

相关内容

  • 没有找到相关文章

最新更新