wzh

wzh

我想有那么一段时光,可以在面朝大海的房车里煮上一杯咖啡,看看曾写过的代码

go 构造函数和复合字面量

本文发布于:2025-06-13

有时,零值不够好,需要一个初始化构造函数,例如,以下示例取自 `os` 包。

func NewFile(fd int, name string) *File {
    if fd < 0 {
        return nil
    }
    f := new(File)
    f.fd = fd
    f.name = name
    f.dirinfo = nil
    f.nepipe = 0
    return f
}

这里有很多样板代码。我们可以使用 *复合字面量* 来简化它,复合字面量是一种每次求值时都会创建一个新实例的表达式

func NewFile(fd int, name string) *File {
    if fd < 0 {
        return nil
    }
    f := File{fd, name, nil, 0}
    return &f
}

请注意,与 C 语言不同,返回局部变量的地址是完全可以的;与该变量相关的存储空间在函数返回后仍然存在。事实上,对复合字面量的地址取址会在每次求值时分配一个新的实例,因此我们可以将最后两行合并起来。

    return &File{fd, name, nil, 0}
wzh

wzh

我想有那么一段时光,可以在面朝大海的房车里煮上一杯咖啡,看看曾写过的代码

联络

  • EMail: qihui658[at]qq.com

标签

链接