file-io - 来自 [] 字节或文件的 io.WriteSeeker 和 io.ReadSeeker

标签 file-io go buffer

我有一个名为“DoSomething”的方法。 DoSomething 将二进制源数据对其进行操作,并写出二进制数据。 DoSomething 需要足够通用以处理源和目标的 []byte 数组或文件句柄。为此,我试图声明这样的方法:

func DoSomething(源 *io.ReadSeeker, 目标 *io.WriteSeeker)

我已经实现了 ReadSeeker 和 WriteSeeker 来处理缓冲区,使用我自己的自定义、必需的方法(如果有一种方法可以自动完成这个,我也很想听听)。 不幸的是,我似乎无法弄清楚如何从文件句柄创建 io.ReadSeeker 或 io.WriteSeeker。我相当确定必须有一些预先准备好的方法来处理这个问题,而不必手动实现它们。这可能吗?

最佳答案

一个文件已经实现了这两个。你可以这样做:

package main

import (
   "fmt"
   "io"
   "os"
)

func main() {
   f, err := os.Open("test.txt")
   if err != nil {
     fmt.Println(err)
   }
   defer f.Close()
   f2, err := os.Create("test2.txt")
   if err != nil {
      fmt.Println(err)
   }
   defer f2.Close()
   DoSomething(f, f2) 
}

func DoSomething(source io.ReadSeeker, destination io.WriteSeeker) {
   io.Copy(destination, source)
}

此外,您不需要将指针传递给接口(interface),这使得处理它们变得更加容易。

关于file-io - 来自 [] 字节或文件的 io.WriteSeeker 和 io.ReadSeeker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602131/

相关文章:

C++ 字符缓冲区指针错误

java - Log4j 不打印到文件或标准输出

C从一个文件读取数据并将计算结果存储在另一个文件中

go - 语义 - 将外部接口(interface)类型值传递给内部接口(interface)变量

go - 如何在 Go 中取立方根?

java - 如何刷新缓冲的 log4j FileAppender?

.net - 如何提高进程的 I/O 优先级?

javascript - 使用 Javascript 格式化纯文本的最快方法

amazon-web-services - 在 AWS 上使用 Elastic Beanstalk 的 Go Web 应用程序未在日志中显示输出

c - 实现生产者/消费者沟通