Я новичок в Go, и я пытаюсь написать простой script, который читает файл по строкам. Я также хочу сохранить прогресс (т.е. Последний номер строки, который был прочитан) в файловой системе где-нибудь, чтобы, если тот же самый файл был указан как вход в script снова, он начинает читать файл из строки, где он остался выкл. Следующим является то, с чем я начал.
package main
// Package Imports
import (
"bufio"
"flag"
"fmt"
"log"
"os"
)
// Variable Declaration
var (
ConfigFile = flag.String("configfile", "../config.json", "Path to json configuration file.")
)
// The main function that reads the file and parses the log entries
func main() {
flag.Parse()
settings := NewConfig(*ConfigFile)
inputFile, err := os.Open(settings.Source)
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()
scanner := bufio.NewScanner(inputFile)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
// Saves the current progress
func SaveProgress() {
}
// Get the line count from the progress to make sure
func GetCounter() {
}
Я не мог найти никаких методов, которые касаются номеров строк в пакете сканера. Я знаю, что могу объявить целое число say counter := 0
и увеличивать его каждый раз, когда строка читается как counter++
. Но в следующий раз, как я скажу сканеру начать с определенной строки? Так, например, если я прочитал до строки 30
в следующий раз, когда я запустил script с тем же входным файлом, как я могу заставить сканер начать чтение из строки 31
?
Update
Одно из решений, о котором я могу думать здесь, - использовать счетчик, как я сказал выше, и использовать условие if, подобное следующему.
scanner := bufio.NewScanner(inputFile)
for scanner.Scan() {
if counter > progress {
fmt.Println(scanner.Text())
}
}
Я уверен, что что-то вроде этого будет работать, но он все равно будет перебирать строки, которые мы уже прочитали. Пожалуйста, предложите лучший способ.