我有一個從字符串到整數的映射,我想通過從標準輸入讀取鍵來選擇一個值。很簡單,你可能會說: 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

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
從文檔:
ReadString 讀取直到輸入中第一次出現 delim ,返回一個包含數據的字符串,直到并包括 delimiter。
如果您對字符串進行切片并刪除最后一個字符,它應該可以工作:
fmt.Println(m[text[:len(text)-1]])
- 2 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消