当前位置: 首页 > 面试题库 >

默认情况下,哪些对象在Go中完成了,它有哪些陷阱?

段曦
2023-03-14
问题内容

该函数[runtime.SetFinalizer](http://golang.org/pkg/runtime/#SetFinalizer)(x, f interface{})将与关联的终结器设置xf

默认情况下会终结哪种对象?

默认情况下终结那些对象会导致哪些意外陷阱?


问题答案:

默认情况下,完成以下对象:

  • os。File:当对象被垃圾回收时,文件自动关闭。

  • os。流程:完成将释放与流程相关的任何资源。在Unix上,这是空操作。在Windows上,它关闭与进程关联的句柄。

  • 在Windows上,程序包似乎[net](http://golang.org/pkg/net/)可以自动关闭网络连接。

除了上述对象之外,Go标准库未在对象类型上设置终结器。

似乎只有一个潜在的问题可能会在实际程序中引起问题:当an
os.File完成时,它将调用OS以关闭文件描述符。如果os.File已经通过调用函数创建,os.NewFile(fd int, name string) *File并且另一个(不同的)文件描述符也被使用os.File,则垃圾回收 其中 一个文件对象将使另一个文件对象不可用。例如:

package main

import (
    "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


 类似资料:
  • 问题内容: 我正在运行一个Ant zip任务来压缩Unix系统上目录的全部内容: 创建zip并检查内容后,我可以看到一些配置文件,Visual Studio特定文件以及其他文件(如Mac OS .DS_STORE文件)不在zip中。 是否遵循任何规则来决定不包含哪些文件? 我需要事先知道,因为我需要在压缩之前(当前使用Java)在该目录上创建现有文件的列表。现在,我排除了所有目录和隐藏文件(使用F

  • 本文向大家介绍vue边界情况有哪些?相关面试题,主要包含被问及vue边界情况有哪些?时的应答技巧和注意事项,需要的朋友参考一下 @Yanhua67 https://cn.vuejs.org/v2/guide/components-edge-cases.html

  • 本文向大家介绍栈溢出有哪些情况?相关面试题,主要包含被问及栈溢出有哪些情况?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)、局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。 2)、递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。3)、指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。

  • 我的问题与这一声明有关: 立即释放此语句对象的数据库和JDBC资源,而不是等到它自动关闭时才释放。http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#close() 那么,在哪些情况下语句对象会自动关闭?

  • null 有人能解释一下目标代码和机器代码这两个概念之间的区别吗?这些是在哪些情况下产生的?

  • 本文向大家介绍hibernate 对象有哪些状态?相关面试题,主要包含被问及hibernate 对象有哪些状态?时的应答技巧和注意事项,需要的朋友参考一下 临时/瞬时状态:直接 new 出来的对象,该对象还没被持久化(没保存在数据库中),不受 Session 管理。 持久化状态:当调用 Session 的 save/saveOrupdate/get/load/list 等方法的时候,对象就是持久化