Перебора строк в 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 в конце многострочной строки. В каждом цикле мы печатаем строку, возвращенную сканированием.
Если вы хотите перебирать многострочный строковый литерал, как показано в вопросе, используйте этот код:
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
}