Diferenças entre io.TeeReader e io.Copy
No Go, io.TeeReader e io.Copy facilitam a transferência de dados de um io. Leitor para um io.Writer. Embora ambas as funções atendam a esse propósito, elas oferecem funcionalidades distintas.
io.Copy
io.Copy é uma função simples e direta que copia dados de forma eficiente de um leitor de origem para um escritor de destino. Ele se concentra exclusivamente na transferência de dados e não retorna valores.
io.TeeReader
io.TeeReader fornece uma abordagem mais versátil. Ao contrário de io.Copy, io.TeeReader cria um novo io.Reader que envolve o leitor original. Ao ler neste novo leitor, os dados são gravados simultaneamente no io.Writer fornecido. Esse recurso é útil quando você precisa inspecionar e processar dados copiados.
Exemplo de uso
Para ilustrar a diferença, considere um cenário em que precisamos copiar dados de um leitor para a saída padrão enquanto também calcula o hash MD5 do conteúdo copiado.
Usando io.TeeReader:
r := io.TeeReader(strings.NewReader(s), os.Stdout)
h := md5.New()
if _, err := io.Copy(h, r); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
Neste exemplo, io.TeeReader nos permite imprimir simultaneamente os dados copiados na saída padrão e calcular o hash MD5 usando a função h.Sum(nil).
io.MultiWriter
Vale a pena notar que a funcionalidade do io.TeeReader também pode ser alcançada usando io.MultiWriter:
mw := io.MultiWriter(h, os.Stdout)
if _, err := io.Copy(mw, strings.NewReader(s)); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
io.MultiWriter combina vários gravadores em um único destino, permitindo efetivamente que os dados sejam gravados em vários locais simultaneamente. Nesse caso, h recebe os dados copiados para cálculo de hash, enquanto os.Stdout os exibe.
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