[go] Go 언어의 파일 및 디렉토리 복사
Go 언어를 사용하여 파일이나 디렉토리를 다른 위치로 복사하는 방법을 알아보겠습니다. 파일을 복사하기 위해서는 os
와 io
패키지를, 디렉토리를 복사하기 위해서는 os
와 path/filepath
패키지를 사용할 수 있습니다.
파일 복사하기
다음은 Go 언어를 사용하여 파일을 복사하는 간단한 예제입니다. os
와 io
패키지를 사용하여 파일을 복사할 수 있습니다.
package main
import (
"os"
"io"
)
func copyFile(src, dst string) (err error) {
srcFile, err := os.Open(src)
if err != nil {
return
}
defer srcFile.Close()
dstFile, err := os.Create(dst)
if err != nil {
return
}
defer dstFile.Close()
_, err = io.Copy(dstFile, srcFile)
if err != nil {
return
}
err = dstFile.Sync()
return
}
위의 예제에서 copyFile
함수는 소스 파일 경로 src
와 대상 파일 경로 dst
를 매개변수로 받습니다. 함수 내부에서는 os.Open
으로 원본 파일을 열고, os.Create
로 대상 파일을 생성한 다음, io.Copy
로 내용을 복사합니다.
디렉토리 복사하기
디렉토리를 복사하는 방법도 간단합니다. os
와 path/filepath
패키지를 사용하여 디렉토리를 복사할 수 있습니다.
package main
import (
"os"
"io"
"path/filepath"
)
func copyDir(src, dst string) (err error) {
srcInfo, err := os.Stat(src)
if err != nil {
return
}
err = os.MkdirAll(dst, srcInfo.Mode())
if err != nil {
return
}
directory, _ := os.Open(src)
objects, err := directory.Readdir(-1)
for _, obj := range objects {
srcFile := filepath.Join(src, obj.Name())
destFile := filepath.Join(dst, obj.Name())
if obj.IsDir() {
err = copyDir(srcFile, destFile)
if err != nil {
return
}
} else {
err = copyFile(srcFile, destFile)
if err != nil {
return
}
}
}
return
}
copyDir
함수는 소스 디렉토리 경로 src
와 대상 디렉토리 경로 dst
를 매개변수로 받습니다. 함수 내부에서는 원본 디렉토리의 정보를 가져와 대상 디렉토리를 생성한 뒤, os.Open
으로 디렉토리를 열고 Readdir
로 모든 파일 및 디렉토리를 읽어옵니다. 그 후 재귀적으로 디렉토리를 복사합니다.
이제 파일과 디렉토리를 복사하기 위한 기본적인 방법을 알아보았습니다. Go 언어에서는 이렇게 간단한 방법으로 파일과 디렉토리를 복사할 수 있습니다.
참고: Go 언어 공식 문서