[go] 파일 경로에서 파일 시스템 변경 사항 감지하기

파일이나 디렉토리가 변경될 때 이를 감지하고 처리하는 것은 많은 애플리케이션에서 필요한 기능입니다. Go 언어에서는 파일 시스템의 변경 사항을 감지하는 방법을 제공합니다.

이 포스트에서는 Go 언어를 사용하여 파일 경로에서 파일 시스템 변경 사항을 감지하는 방법을 알아보겠습니다.

inotify를 사용한 파일 시스템 변경 감지

Linux에서 파일 시스템 변경 사항을 감지하기 위해 inotify를 사용할 수 있습니다. Go 언어에서는 golang.org/x/exp/inotify 패키지를 사용하여 inotify를 활용할 수 있습니다.

import (
	"golang.org/x/exp/inotify"
	"log"
)

func main() {
	watcher, err := inotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}
	defer watcher.Close()

	err = watcher.Watch("/path/to/directory")
	if err != nil {
		log.Fatal(err)
	}

	for {
		select {
		case event := <-watcher.Event:
			log.Println("Event:", event)
		case err := <-watcher.Error:
			log.Println("Error:", err)
		}
	}
}

이 코드는 inotify를 사용하여 지정된 디렉토리에서 변경 사항을 감지하는 간단한 예제입니다.

fsnotify를 사용한 파일 시스템 변경 감지

또 다른 옵션으로는 fsnotify 패키지를 사용하는 것입니다. fsnotify는 파일 시스템 변경 사항을 감지하는 인터페이스를 제공합니다.

import (
	"github.com/fsnotify/fsnotify"
	"log"
)

func main() {
	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}
	defer watcher.Close()

	err = watcher.Add("/path/to/directory")
	if err != nil {
		log.Fatal(err)
	}

	for {
		select {
		case event, ok := <-watcher.Events:
			if !ok {
				return
			}
			log.Println("Event:", event)
		case err, ok := <-watcher.Errors:
			if !ok {
				return
			}
			log.Println("Error:", err)
		}
	}
}

위 코드는 fsnotify 패키지를 사용하여 파일 시스템 변경을 감지하는 간단한 예제입니다.

결론

이러한 방법을 사용하여 Go 언어에서 파일 시스템 변경을 감지하고 적절히 처리할 수 있습니다. 애플리케이션의 필요에 따라 적절한 방법을 선택하여 파일 변경 이벤트를 안정적으로 처리할 수 있습니다.

이러한 기능을 사용하면 파일 시스템 변경에 신속하게 대응할 수 있고, 실시간으로 파일 시스템 변경 사항을 모니터링할 수 있습니다.

참고 자료