Go에서 효율적이고 간단한 파일 복사
복잡한 라이브러리나 운영 체제 종속 코드에 의존하지 않고 Go에서 파일을 효율적으로 복사합니다. 다양한 엣지 케이스를 처리하는 강력한 구현을 사용하여 달성할 수 있습니다.
빠른 속도를 위해 하드 링크 사용 복제
기존 파일을 복제하는 가장 빠른 방법은 os.Link() 함수를 사용하는 것입니다. 이렇게 하면 원본 파일과 대상 파일 사이에 하드 링크가 생성되어 복사본을 만드는 대신 본질적으로 동일한 파일이 됩니다. 이 접근 방식은 특히 대용량 파일의 경우 시간과 디스크 공간을 절약합니다.
다양한 시스템 제한 사항 처리
그러나 하드 링크에는 운영 체제 및 파일 시스템에 따라 제한이 따릅니다. 구성. 예를 들어, 일부 시스템에서는 서로 다른 파일 시스템이나 파티션에 있는 파일 간의 하드 링크를 허용하지 않습니다.
강력하고 일반 복사 기능
일반적이고 강력한 복사 기능을 생성하려면 , 다음 단계를 수행하십시오.
최적화 및 단순성
성능을 향상하려면, 호출 스레드를 차단하지 않도록 별도의 go 루틴에서 바이트 복사를 수행할 수 있습니다. 그러나 이로 인해 성공 또는 실패를 처리해야 하는 호출자의 책임이 복잡해집니다.
더 쉬운 구현을 위해 동기 복사를 위한 CopyFile()과 비동기 복사를 위한 CopyFileAsync()라는 두 개의 별도 복사 함수를 만들 수 있습니다. 호출자에 대한 신호 채널.
샘플 코드
제공된 코드는 강력한 CopyFile 기능을 보여줍니다. 바이트 복사 폴백을 수행하기 전에 하드 링크를 시도합니다:
package main import ( "fmt" "io" "os" ) func CopyFile(src, dst string) (err error) { // Validate input // ... if err = os.Link(src, dst); err == nil { return } err = copyFileContents(src, dst) return } func copyFileContents(src, dst string) (err error) { // Copy file contents // ... return } func main() { // ... err := CopyFile(os.Args[1], os.Args[2]) if err != nil { // ... } }
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3