默认情况下,完成以下对象:
os。File:当对象被垃圾回收时,文件自动关闭。
os。流程:完成将释放与流程相关的任何资源。在Unix上,这是空 *** 作。在Windows上,它关闭与进程关联的句柄。
在Windows上,程序包似乎
[net](http://golang.org/pkg/net/)
可以自动关闭网络连接。
除了上述对象之外,Go标准库未在对象类型上设置终结器。
似乎只有一个潜在的问题可能会在实际程序中引起问题:当an
os.File完成时,它将调用OS以关闭文件描述符。如果
os.File已经通过调用函数创建,
os.NewFile(fd int, namestring) *File并且另一个(不同的)文件描述符也被使用
os.File,则垃圾回收 其中 一个文件对象将使另一个文件对象不可用。例如:
package mainimport ( "fmt" "os" "runtime")func open() { os.NewFile(1, "stdout")}func main() { open() // Force finalization of unreachable objects _ = make([]byte, 1e7) runtime.GC() _, err := fmt.Println("some text") // Print something via os.Stdout if err != nil { fmt.Fprintln(os.Stderr, "could not print the text") }}
印刷品:
could not print the text
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)