2017-04-19 118 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) 
} 
相关问题