为了账号安全,请及时绑定邮箱和手机立即绑定

从标准输入读取映射键

从标准输入读取映射键

Go
慕斯709654 2022-06-21 16:12:10
我有一个从字符串到整数的映射,我想通过从标准输入读取键来选择一个值。很简单,你可能会说:  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


查看完整回答
反对 回复 2022-06-21
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

从文档:

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

如果您对字符串进行切片并删除最后一个字符,它应该可以工作:

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


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信