Dictionary 从stdin读取映射键
我有一个从字符串到int的映射,我想通过从stdin读取键来选择一个值。很简单,你可以说:Dictionary 从stdin读取映射键,dictionary,go,stdin,Dictionary,Go,Stdin,我有一个从字符串到int的映射,我想通过从stdin读取键来选择一个值。很简单,你可以说: package main import ( "os" "bufio" "fmt" ) func main() { m := map[string]int { "Hello": 1,
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。如果我猜的话,使用reader.ReadString会将用户输入附加一个\n。因此,文本字段最终为Hello\n
使用budio.NewScanner可修复此问题:
func main{
m:=map[string]int{
你好:1,,
地图:2,,
}
扫描仪:=bufio.NewScanneros.Stdin
扫描器,扫描器
text:=扫描仪。text
fmt.Printlnm[文本]
}
输出:
$go运行main.go
你好
1.
从文档中:
ReadString一直读取,直到输入中第一次出现delim,返回一个包含数据的字符串,该字符串最多包含分隔符
如果对字符串进行切片并删除最后一个字符,则应该可以:
fmt.Printlnm[text[:lentext-1]]
你检查过文本里面到底是什么吗?请显示fmt.Printf%x\n,text的输出。您是指strings.TrimSpace吗?不是,我是指从文本中删除最后一个字符。这个分隔符可以是任何东西。