Go での効率的かつシンプルなファイルのコピー
複雑なライブラリやオペレーティング システムに依存するコードに頼ることなく、Go でファイルを効率的にコピーします。さまざまなエッジケースを処理する堅牢な実装を使用して実現できます。
ハードの使用高速複製のためのリンク
既存のファイルを素早く複製する方法は、os.Link() 関数を使用することです。これにより、元のファイルと宛先ファイルの間にハード リンクが作成され、コピーを作成するのではなく、本質的に同じファイルになります。この方法では、特に大きなファイルの場合に、時間とディスク容量が節約されます。
さまざまなシステム制限の処理
ただし、ハード リンクには、オペレーティング システムとファイル システムに応じた制限があります。構成。たとえば、一部のシステムでは、異なるファイル システムまたはパーティション上のファイル間のハード リンクが許可されていません。
堅牢で汎用的なコピー関数
汎用かつ堅牢なコピー関数を作成するには場合は、次の手順を実行します。
最適化と簡素化
パフォーマンスを向上させるには、呼び出しスレッドのブロックを避けるために、バイトのコピーを別の go ルーチンで実行できます。ただし、これにより、成功または失敗を処理する呼び出し側の責任が複雑になります。
実装を容易にするために、同期コピーの CopyFile() と非同期コピーの CopyFileAsync() という 2 つの別々のコピー関数を作成できます。発信者へのシグナリング チャネル。
サンプルコード
提供されたコードは、バイト コピー フォールバックを実行する前にハード リンクを試みる堅牢な 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 { // ... } }
以上がGo でファイルを効率的かつ簡単にコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。