Dictionary 从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,

我有一个从字符串到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])
 }
在向控制台写入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吗?不是,我是指从文本中删除最后一个字符。这个分隔符可以是任何东西。