Считывание stdin построчно в цикле используя fmt.Scanln(&str)

Возникла проблема во время знакомства с go: как в цикле считать построчно весь stdin используя fmt.Scanln(&str), если он возвращает 2 значения

for fmt.Scanln(&str) {
    fmt.Println(str)
}

такой вариант естественно выдает ошибку и все что приходит в голову это переместить вызов fmt.Scanln(&str) внутрь цикла, а в условие поместить проверку по одному из возвращаемых значений.


Ответы (2 шт):

Автор решения: Ainar-G

Можете воспользоваться трёхинструкционным for:

for _, err = fmt.Scanln(&str); err == nil; _, err = fmt.Scanln(&str) {
        fmt.Println(str)
}

if err != nil && err != io.EOF {
        panic(err)
}
→ Ссылка
Автор решения: hedgehogues

Вы всегда можете воспользоваться буферизированным reader и делать это в цикле:

package main
import (
    "fmt"
    "bufio"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter text: ")
    text, _ := reader.ReadString('\n')
    fmt.Println(text)
}
→ Ссылка