2011-09-17 8 views
3

私は少しでも幸運でGoでユーザー入力を取得しようとしています。間隔のあるユーザー入力を取得する

var s string 
println("enter string:") 
fmt.Scan(&s) 

しかし、Goのドキュメントでは、スペースと改行で区切られていると言われています。だから私はbufio.ReaderのReadLineを設定しなければならないと思う。

package main 

import (
    "bufio" 
    "os" 
    "fmt" 
) 

const delim = '\n' 
const file = "file" 

func main() { 

    r := bufio.NewReader() *Reader 

    println("enter string:") 
    line, err := r.ReadString(delim) 
    if err != nil { 
     fmt.Println(err) 
     os.Exit(1) 
    } 
    fmt.Println(line) 

} 

エラー:ここではコンパイルされません私の試みであり、

1.go:14: not enough arguments in call to bufio.NewReader 
1.go:14: undefined: Reader 

をそうで、どのように私は、 "リーダー" を定義していますか?そして、もしそれが定義されていれば、入力をスペースではなく "\ n"で区切られた文字列として取り込む正しい方法でしょうか?それとも全く違う何かをしなければならないのですか?

ありがとうございます。

答えて

3

変更を使用してFileを構築することができます。

the specからメソッドのシグネチャをコピーして貼り付けたようですが、仕様ではコールの例ではなくシグニチャが定義されているため、*Readerにはメソッドの戻り値の型があります変数rがあります)。メソッドの唯一の引数はrd io.Readerと定義されています。そのインターフェイスは、あなたの仕事に完璧にマッチするように見えるos.Stdinシンボルによって便利に実装されます。

P.S. "Learning Go"ドキュメントセクションのすべてのドキュメント、特に「有効な終了」を読むことを検討してください。

+0

ありがとう、これは素晴らしい仕事。私はいくつかの概念の周りに私の頭をラッピングいくつかの問題を抱えて、私は、ドキュメントを読んだ:) – rick

1

あなたがbufio.NewReaderのドキュメントを見れば、それは(もReader引数を取るJavaでjava.io.BufferedReaderに似て、それは通常のリーダーを取り、それをバッファリングしますので、理にかなって、)タイプio.Readerの引数を取ります。 io.Readerとは何ですか?そのドキュメントを見ると、それはReadメソッドを持つものを指定するインタフェースです。多くのタイプにはReadメソッドがあります。最も一般的には*os.Fileです。だから、

r := bufio.NewReader() *Reader 

は、問題を解決するために

r := bufio.NewReader(os.Stdin) 

を読むためにos.Openなど

f, _ := os.Open(file) 
r := bufio.NewReader(f) 
関連する問題