Cópia de arquivo simples e eficiente em Go
Copiar um arquivo de forma eficiente em Go, sem recorrer a bibliotecas complexas ou código dependente do sistema operacional, pode ser alcançado usando uma implementação robusta que lida com vários casos extremos.
Usando hard links para duplicação rápida
Uma maneira rápida de duplicar um arquivo existente é usar o sistema operacional Função .Link(). Isso cria um link físico entre o arquivo original e o arquivo de destino, essencialmente tornando-os o mesmo arquivo em vez de criar uma cópia. Essa abordagem economiza tempo e espaço em disco, especialmente para arquivos grandes.
Lidando com diferentes restrições do sistema
No entanto, links físicos vêm com restrições dependendo do sistema operacional e do sistema de arquivos configurações. Por exemplo, alguns sistemas não permitem links físicos entre arquivos em diferentes sistemas de arquivos ou partições.
Função de cópia robusta e genérica
Para criar uma função de cópia genérica e robusta , execute as seguintes etapas:
Otimização e simplicidade
Para melhorar o desempenho, a cópia de bytes pode ser executada em uma rotina go separada para evitar o bloqueio do thread de chamada. No entanto, isso adiciona complexidade à responsabilidade do chamador de lidar com o sucesso ou a falha.
Para uma implementação mais fácil, pode-se criar duas funções de cópia separadas: CopyFile() para cópia síncrona e CopyFileAsync() para cópia assíncrona, que retorna um canal de sinalização para o chamador.
Código de exemplo
O código fornecido demonstra uma função CopyFile robusta que tenta um link físico antes de executar um fallback de cópia de byte:
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 { // ... } }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3