Go では、fmt.Fscan 関数を使用して複数の数値を配列またはスライスに読み取ることができます。ただし、スライスに直接スキャンしようとすると、エラーが発生する場合があります。これは、 fmt.Fscan 関数が本質的にスライスのスキャンをサポートしていないためです。
この問題を解決するには、すべてのスライス要素のアドレスを配列にパックするユーティリティ関数を作成できます。その方法は次のとおりです:
func packAddrs(n []int) []interface{} { p := make([]interface{}, len(n)) for i := range n { p[i] = &n[i] } return p }
ユーティリティ関数を取得したら、それを使用してスライス全体をスキャンして配列に入れることができます:
numbers := make([]int, 2) n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) fmt.Println(numbers, n, err)
テスト目的で、 fmt.Sscan を使用して文字列をスライスにスキャンできます:
numbers := make([]int, 5) n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...) fmt.Println(numbers, n, err)
出力 (外出先で試してみてください)遊び場):
[1 3 5 7 9] 5 <nil>
以上が標準入力から Go スライスに複数の数値を効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。