gpt4 book ai didi

go - 可能有一个新函数在 Golang 中分配文件描述符

转载 作者:IT王子 更新时间:2023-10-29 01:41:20 25 4
gpt4 key购买 nike

由于我有 C 和 C++ 背景,而且 golang 在语义上是不同的,所以我讨论了函数名称“New”与“Open”以及程序员期望在引擎盖下发生什么。我创建了一个包,其中 New 函数将文件描述符打开到临时文件。我不确定这是用 Go 编写的 API 的预期行为。

这是一个片段:

// Not directly convenient New allocates file descriptors
deb := New()
deb.AddFile("/tmp/myfile")
deb.Write("/tmp/mypackage.deb")
deb.Close()

// Idiomatic it opens file descriptors but we have to provide context to open
info := &Props{Name: "mypackage"}
deb := info.Open("/tmp/mypackage.deb")
deb.AddFile("/tmp/myfile")
deb.Close()

最佳答案

Go 的社区仍在寻找它的习语和模式,所以不要考虑任何教条。根据我一年半以来的所见所闻,如果有 godoc 注释解释行为,我认为在 New 函数中触摸磁盘并没有错。它不寻常,并且在 d.Write() 中触摸磁盘可能更有意义。我在 New 函数中看到的一些常见模式:

  • 仅在设计供其他包使用时才导出
  • 从其他包调用时有意义,包名前缀为:d := deb.New(...)(因为您有一个名为 deb 的变量,你的包裹是别的东西)
  • 返回包的主要业务逻辑的实例,以供进一步使用
  • 接受依赖作为参数而不是构建它自己的依赖(希望任何行为依赖都是接口(interface))
  • 通常 main() 函数组装这些依赖项,调用 d := deb.New(deps),并执行行为 d.AddFile() ; d.写(); d.Close()

使用接口(interface)的示例签名:

package deb

// New accepts blah returning a *Deb. It returns nil if blah.
func New(name string, to io.WriteCloser) *Deb {...}

关于go - 可能有一个新函数在 Golang 中分配文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com