Перебора строк в Go

в Python я могу перебирать многострочную строку.

x = """
this is
my multiline
string!"""

for line in x.splitlines():
    print(line)

может пойти сделать то же самое?

2 ответов


можно использовать bufio.Scanner в Go, который повторяет строки из io.Reader. В следующем примере создается считыватель из заданной многострочной строки и передается в функцию фабрики сканера. Каждый вызов scanner.Scan() разбивает считыватель на следующую строку и буферизует строку. Если больше нет строк, он возвращает false. Зову scanner.Text() возвращает буферизованный сплит.

var x string = `this is
my multiline
string`

scanner := bufio.NewScanner(strings.NewReader(x))
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

в Примере цикл for будет продолжаться до Scan() возвращает false в конце многострочной строки. В каждом цикле мы печатаем строку, возвращенную сканированием.

https://play.golang.org/p/U9_B4TsH6M


Если вы хотите перебирать многострочный строковый литерал, как показано в вопросе, используйте этот код:

for _, line := range strings.Split(strings.TrimSuffix(x, "\n"), "\n") {
    fmt.Println(line)
}

запустите код на игровой площадке

Если вы хотите перебирать данные, считанные из файла, используйте bufio.Сканер. В документации есть пример, показывающий, как перебирать строки:

scanner := bufio.NewScanner(f) // f is the *os.File
for scanner.Scan() {
    fmt.Println(scanner.Text()) // Println will add back the final '\n'
}
if err := scanner.Err(); err != nil {
   // handle error
}