从标准输入读取映射键

我有一个从字符串到整数的映射,我想通过从标准输入读取键来选择一个值。很简单,你可能会说:


  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。


慕斯709654
浏览 107回答 2
2回答

天涯尽头无女友

如果我猜的话,使用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.goHello1

慕无忌1623718

从文档:ReadString 读取直到输入中第一次出现 delim ,返回一个包含数据的字符串,直到并包括 delimiter。如果您对字符串进行切片并删除最后一个字符,它应该可以工作:fmt.Println(m[text[:len(text)-1]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go