Golang从stdin行读取多个字段

Are*_*ski 1 stdin split scanf go

$ echo "A 1 2 3 4" | go run test.go 
entire:  A
next field:  A
Run Code Online (Sandbox Code Playgroud)

我需要从标准输入中读取几行,例如“ A 1 2 3 4”(代码现在只占一行),并且出了点问题。Scanln应该阅读整行,并Fields用换行符分隔?为什么Scanln只读一个字?

package main

import (
    "fmt"
    "strings"
)

func main() {
    var line string
    fmt.Scanln(&line)
    fmt.Println("entire: ",line)
    for _,x := range strings.Fields(line) {
        fmt.Println("next field: ",x)
    }
}
Run Code Online (Sandbox Code Playgroud)
$ echo "A 1 2 3 4" | go run test.go 
entire:  A
next field:  A
Run Code Online (Sandbox Code Playgroud)

Eug*_*sky 5

你有没有尝试过:

package main

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

func main() {
    var line string
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        line = scanner.Text()
        fmt.Println("Got line:", line)
        for _, x := range strings.Fields(line) {
            fmt.Println("next field: ",x)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

$ printf "aa bb \n cc dd " | go run 1.go  
Got line: aa bb
next field:  aa
next field:  bb
Got line:  cc dd
next field:  cc
next field:  dd
Run Code Online (Sandbox Code Playgroud)