Я изучаю go язык и попробуйте переписать часть моего кода на Python с помощью golang. Я написал функцию генератора, которая читает текстовый файл по строкам и посылает (используя выход ключевое слово) только «правильные» строки (пустые строки игнорируются, нереализованные строки рекомпозируются).golang: читать генератор файлов
Пример файла (myfile.txt):
#123= FOOBAR(1.,'text');
#126= BARBAZ('poeazpfodsp',
234,56);
parse.py:
#!/usr/bin/python
def validlines(filename):
with open(filename) as fdin:
buff = ''
for line in fdin.readlines():
line = line.strip()
if line == '':
continue
buff += line
if line[-1] != ';':
continue
yield buff
buff = ''
fdin.close()
for line in validlines('myfile.txt'):
print(line)
дисплеи:
#123= FOOBAR(1.,'text');
#126= BARBAZ('poeazpfodsp',234,56);
Теперь я пытаюсь сделать это таким же образом, используя закрытие в голанге:
pa rse.go:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func validLines(filename string) (func() (string, bool)) {
file, _ := os.Open(filename)
scanner := bufio.NewScanner(file)
return func() (string, bool) {
buff := ""
for scanner.Scan() {
line := scanner.Text()
line = strings.TrimSpace(line)
if line == "" {
continue
}
buff += line
if line[len(line)-1] != ';' {
continue
}
return buff, true
}
file.Close()
return "", false
}
}
func main() {
vline := validLines("myfile.txt")
for line, ok := vline(); ok; {
fmt.Println(line)
}
}
дисплеи:
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
#123= FOOBAR(1.,'text');
...
Что такое правильный способ сделать это в golang?
Я искал проблему в функции validLines, спасибо большое. –