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

ユーザーがヌル値を入力したかどうか、コードはどこに置くのですか?注 - 私はすでに長さ= 0= " "を確認しようとしましたが、動作していないようです。ユーザーがGoにnull値を入力したかどうかを確認するにはどうすればよいですか?

これに代わる方法を提案してください。ありがとう!

+2

私は理にかなっている「null値を入力します」とは思いません。 Nullは入力がないことを示します。あなたがストリーム入力で得ることができるのは、長さ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に、区切り文字が含まれています。

ユーザーはちょうど Enterキーを押す何も入力しない場合は、空の入力をチェックする"\n"に結果を比較する必要がありますので、ReadString()の戻り値は、"\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) 
} 
関連する問題