Идея, читать файл после изменений, эти изменение передавать в другую функцию
Имею Watcher это go файл с одной функцией, которая отслеживает эти изменения ( то что в файл записались новые данные)
func MusicFile() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
fmt.Println("start")
for {
select {
case event := <-watcher.Events:
if event.Op&fsnotify.Write == fsnotify.Write {
Parser.ParseMusicFile() -- Вызываю функцию парсинга если в канал записались данные о том что файл перезаписан
}
case err := <-watcher.Errors:
fmt.Println("error:", err)
}
}
}()
err = watcher.Add(Parser.ParsConfig().Directory)
if err != nil {
log.Fatal(err)
}
<-done
}
Имею парсер файла
func ParseMusicFile() *MusicFile {
reSong := regexp.MustCompile(`(?m)(^[^|]+(?:|))`)
reArtist := regexp.MustCompile(`(?m)\|(.*)`)
file, err := os.Open(ParsConfig().Directory)
if err != nil {
panic(err)
}
defer file.Close()
MusicFile := &MusicFile{}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if reSong.MatchString(scanner.Text()) { // Тут записывается результат найдено значение по регулярке или нет
//*MusicFile.Song := reSong.MatchString(scanner.Text())
MusicFile.Song = reSong.FindStringSubmatch(scanner.Text())[1]
}else {
MusicFile.Song = "null"
}
if reArtist.MatchString(scanner.Text()) { //Тут записывается результат найдено значение по регулярке или нет
MusicFile.Artist = reArtist.FindStringSubmatch(scanner.Text())[1]
}else {
MusicFile.Artist = "null"
}
}
return MusicFile
}
Парсер возвращает структуру
type MusicFile struct {
Artist string
Song string
}
Смысл какой, при запуске Watcher процесса он висит и читает изменения в файле, изменения туда попадают с помощью стороннего софта, как мне правильно организовать постоянную "отдачу" изменений с помощью Watcher функции
Поставьте на путь истинный, я так полагаю изменения с помощью парсера так же нужно принимать через канал? и передавать уже поинтер на этот канал туда куда надо?