2017-04-19 172 views
1
reader := bufio.NewReader(os.Stdin) 
fmt.Print("Enter text: ") 
text, _ := reader.ReadString('\n') 
fmt.Println("Hello",text) 

如何檢查用戶是否輸入了空值以及我在哪裏放置了代碼?注意 - 我已經試過檢查長度= 0= " ",但是,它們似乎沒有工作。如何檢查用戶是否在Go中輸入了空值?

請爲此建議一種替代方法。謝謝!

+2

我不認爲「輸入一個空值」是有道理的。空是沒有輸入。你可以在一個流輸入中得到最接近的字符串,它是一個長度爲0的字符串,但是你知道在Go中(或者幾乎任何語言)''「'和'nil'不是一樣的。 – Flimzy

+0

http://stackoverflow.com/questions/18594330/what-is-the-best-way-to-test-for-an-empty-string-in-go –

回答

6

bufio.Reader.ReadString()返回string包含分隔符,在這種情況下,換行符\n

如果用戶不輸入任何東西只是按下輸入關鍵的ReadString()的返回值將是"\n",所以你要的結果比較"\n"檢查空輸入:

reader := bufio.NewReader(os.Stdin) 
fmt.Print("Enter text: ") 
text, err := reader.ReadString('\n') 
if err != nil { 
    panic(err) // Don't forget to check and handle returned errors! 
} 

if text == "\n" { 
    fmt.Println("No input!") 
} else { 
    fmt.Println("Hello", text) 
} 

一個更好的選擇是使用strings.TrimSpace()刪除前導和尾隨空格字符(包括換行符;如果有人輸入2個空格並按輸入,該解決方案也將其過濾掉),這不是一個有意義的名稱。您可以比較空字符串""如果調用之前strings.TrimSpace()

text = strings.TrimSpace(text) 
if text == "" { 
    fmt.Println("No input!") 
} else { 
    fmt.Println("Hello", text) 
} 
相關問題