Go 言語では、scan
メソッドを使用して標準入力からデータを読み取ることができます。 scan
メソッドは、文字列、数値、ブール値など、あらゆる種類のデータを読み取ることができます。この記事では、scan
メソッドを使用してコンソール入力を実装する方法を詳しく紹介します。
scan
メソッドの基本構文は次のとおりです。
func Scan(a ...interface{}) (n int, err error)
入力からデータを読み取り、指定されたパラメーターに格納します。 。パラメータ a
は、読み取る必要があるデータを表します。パラメータはいくつでも渡すことができます。各パラメータは、入力データを格納するために使用されるポインタ型です。戻り値 n
は正常に読み取られたパラメータの数を示し、戻り値 err
は考えられるエラーを示します。
以下は、コンソールから 2 つの整数を読み取る方法を示す簡単な例です。
func main() { var a, b int fmt.Print("请输入两个整数:") n, err := fmt.Scan(&a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b}) }
上記のコードを通じて、Scan
メソッドの基本を確認できます。使用法。上記のコードを実行すると、プログラムはユーザーに 2 つの整数の入力を求めます。ユーザーの入力が完了すると、プログラムは 2 つの整数を変数 a
と b
に格納し、 2 つの整数。
Scan
メソッドには次の特徴があります:
Scan
データを読み取るとき、メソッドはデータ間のスペースを自動的に無視します。次のコードに示すように、
func main() { var a, b, c string fmt.Print("请输入三个字符串:") n, err := fmt.Scan(&a, &b, &c) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c}) }
文字列 hello world go
を入力すると、プログラムは文字列間のスペースを自動的に無視し、これら 3 つの文字列を出力します。
Scan
メソッドは、データの読み取り時にユーザーが復帰文字 \n
を入力するのを待機します。入力が完了したことを確認します。ユーザーが復帰文字を入力しない場合、プログラムはユーザーの入力を待ちます。次のコードに示すように:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
文字列 hello
を入力した後、プログラムは結果をすぐに出力せず、ユーザーが復帰文字 \ を入力するのを待ちます。 n
、結果が出力されます。
Scan
メソッドは、データの読み取り時に入力内の改行文字を読み取りません\n
。たとえば、Scan
メソッドを通じて文字列を読み取る場合、入力文字列内の改行文字 \n
は読み取られません。次のコードに示すように:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
文字列 hello\nworld
を入力すると、プログラムは文字列 hello
のみを読み取り、文字列改行文字 は読み取りません。 \n
で。
Scan
メソッドの実装は、fmt
パッケージの Scanf
関数に基づいています。 。 Scanf
メソッドには次の機能があります:
Scanf
メソッドはフォーマットされた入力をサポートします。フォーマット文字列を使用して、読み込むデータ型を指定できます。たとえば、次の書式文字列を使用して整数と文字列を読み取ることができます:
func main() { var a int var b string fmt.Print("请输入一个整数和一个字符串:") n, err := fmt.Scanf("%d %s", &a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b}) }
上記のコードで、定義された書式文字列 "%d %s"
は、「最初に整数を読み取る」ことを意味します。 、スペースで区切られた文字列を読み取ります。
Scanf
メソッドはカスタム区切り文字をサポートします。デフォルトでは、Scanf
メソッドは区切り文字としてスペースを使用します。区切り文字は、Scanf
メソッドの ScanState
パラメーターを使用してカスタマイズできます。次のコードに示すように:
func main() { var a, b string fmt.Print("请输入两个字符串,用逗号分隔:") s := bufio.NewScanner(os.Stdin) s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) { for i := 0; i < len(data); i++ { if data[i] == ',' { return i + 1, data[:i], nil } } return 0, data, bufio.ErrFinalToken }) if s.Scan() { a = s.Text() } if s.Scan() { b = s.Text() } fmt.Printf("您输入的字符串是:%v\n", []string{a, b}) }
上記のコードでは、bufio
パッケージの NewScanner
メソッドを通じて Scanner
オブジェクトを作成します。およびセパレータは Split
メソッドを通じてカスタマイズされます。 delimiter 関数では、区切り文字としてカンマを使用して入力文字列を解析し、変数 a
と b
に格納します。
この記事の導入部を通じて、Scan
メソッドの基本的な構文と特性、およびコンソール入力の実装方法について学びました。 Scan
メソッドは、入力を処理するときに改行文字 \n
を入力に読み込まないことに注意してください。さらに、Scanf
メソッドはカスタム区切り文字とフォーマットされた入力をサポートしており、コンソール入力をより柔軟に処理できます。
以上がscan メソッドを使用してコンソール入力を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。