Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个新函数可以在Golang中分配文件描述符吗 当我来自C和C++背景,golang在语义上不同,我对函数名“新”和“打开”进行了一些讨论,程序员希望在引擎盖下发生什么。我已经创建了一个包,新函数在其中打开临时文件的文件描述符。我不确定这是否是用Go编写的api的预期行为_Go - Fatal编程技术网

一个新函数可以在Golang中分配文件描述符吗 当我来自C和C++背景,golang在语义上不同,我对函数名“新”和“打开”进行了一些讨论,程序员希望在引擎盖下发生什么。我已经创建了一个包,新函数在其中打开临时文件的文件描述符。我不确定这是否是用Go编写的api的预期行为

一个新函数可以在Golang中分配文件描述符吗 当我来自C和C++背景,golang在语义上不同,我对函数名“新”和“打开”进行了一些讨论,程序员希望在引擎盖下发生什么。我已经创建了一个包,新函数在其中打开临时文件的文件描述符。我不确定这是否是用Go编写的api的预期行为,go,Go,以下是一个片段: //不方便直接新分配文件描述符 deb:=New() deb.AddFile(“/tmp/myfile”) deb.Write(“/tmp/mypackage.deb”) deb.Close() //惯用它打开文件描述符,但我们必须提供打开的上下文 信息:=&Props{Name:“mypackage”} deb:=info.Open(“/tmp/mypackage.deb”) deb.AddFile(“/tmp/myfile”) deb.Close() Go的社区仍然在寻找

以下是一个片段:

//不方便直接新分配文件描述符
deb:=New()
deb.AddFile(“/tmp/myfile”)
deb.Write(“/tmp/mypackage.deb”)
deb.Close()
//惯用它打开文件描述符,但我们必须提供打开的上下文
信息:=&Props{Name:“mypackage”}
deb:=info.Open(“/tmp/mypackage.deb”)
deb.AddFile(“/tmp/myfile”)
deb.Close()

Go的社区仍然在寻找它的成语和模式,所以不要考虑任何教条。根据我在一年半的时间里所看到的情况,我认为在

新的
函数中触摸磁盘(如果它有解释行为的godoc注释)是不对的。在
d.Write()
中触摸磁盘可能会很不寻常,而且可能更有意义。我在
新功能中看到的一些常见模式:

  • 仅在设计供其他软件包使用时导出
  • 从其他包调用时,如果包名前缀为:
    d:=deb.New(…)
    (因为您有一个名为
    deb
    的变量,所以您的包是其他的)
  • 返回包的主业务逻辑的实例,以供进一步使用
  • 接受依赖项作为参数,而不是构建自己的依赖项(希望任何行为依赖项都是接口)
  • 通常,
    main()
    函数组合这些依赖项,调用
    d:=deb.New(deps)
    ,并执行行为
    d.AddFile();d、 Write();d、 Close()
使用接口的签名示例:

package deb

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