Go:如何读取两个文件的内容并连接成字符串

问题描述 投票:0回答:1

我正在尝试修复 docker-machine 中的错误。问题似乎出在 vmware-fusion 驱动程序上。当尝试通过 MAC 地址解析计算机时,它会查阅 vmware dhcp 租用文件。不幸的是,当您使用自定义网络(例如专用网络 vmnet2)时,最新的 dhcp 租约将位于文件“vmnet-dhcpd-vmnet2.leases”中。

不管怎样,我对围棋的了解是不存在的。

我想实现类似(伪代码)的东西:

var allText = ""
for i in "/var/db/vmware/*.leases"
  do read i; allText = allText ++ i
done

现有代码(fusion_darwin.go)看起来像这样:

// DHCP lease table for NAT vmnet interface
var dhcpfile = "/var/db/vmware/vmnet-dhcpd-vmnet8.leases"

if vmxfh, err = os.Open(d.vmxPath()); err != nil {
    return "", err
}
defer vmxfh.Close()

if vmxcontent, err = ioutil.ReadAll(vmxfh); err != nil {
    return "", err
}

我已经创建了一个问题等,但如果可能的话,我想进一步了解更多关于 Go 的知识,并贡献我能解决的任何问题。

有什么想法吗?

arrays go io docker-machine defer-keyword
1个回答
2
投票

在示例代码中,他们首先使用

os.Open
返回文件的
io.Reader
,然后延迟关闭(在离开延迟范围之前调用延迟方法)以确保清理其资源。在下一行中,他们调用
ioutil.ReadAll
,它接受
io.Reader
并返回
[]byte, error
。如果错误非零,他们只会返回错误和一个空字符串。要从 []byte 中获取字符串,您只需执行
s := string(myBytes)

因此,要读取目标文件,您只需复制上面代码的形式即可。更好的是,您可以将其移动到一个方法中并将文件路径传递给它,以便您可以重用它。值得注意的是,

ioutil
包中有一种更简单的方法可以使用。我不确定上面的代码中没有使用它是否有充分的理由,而不是打开文件并将
io.Reader
传递给
ReadAll
你可以直接调用
ioutil.ReadFile
传递路径,它也返回一个
[]byte, error
,检查错误后,您可以将一个字节切片附加到另一个字节切片,转换为字符串并返回它。它看起来有点像这样;

vmnetcontent, err := ioutil.ReadFile("/path/to/file.txt")

if err != nil {
    return "", err
}

return string(append(vmxcontent, vmnetcontent)), nil
© www.soinside.com 2019 - 2024. All rights reserved.