Skip to content

由于go1.26发布,需要更新基础面试题1.4 Golang 中 make 和 new 的区别 #8

Description

@Xaytick

️ Go 1.26 对 new 的重大更新

随着 Go 1.26 版本的发布,new 函数的功能得到了显著增强。虽然上述关于 new “只分配不初始化(仅返回零值)”的描述适用于 Go 1.25 及之前的版本,但在 Go 1.26 及之后的版本中,new 的行为有了本质的改变,尤其是支持表达式初始化。

在 Go 1.26 中,new 不再只能创建零值,它现在支持接收一个表达式作为参数。这意味着你可以直接使用 new 来创建并初始化一个值,而不仅仅是分配内存。

  • 旧写法(Go 1.25 及以前):
    如果你想创建一个指向特定值的指针,你必须先定义变量或使用辅助函数。
p := new(int) // new 返回的是指针
*p = 42 // 必须通过 * 解引用才能赋值
  • 新写法(Go 1.26+):
    new 可以直接接收字面量或函数返回值,它会复制表达式的结果并返回指向该副本的指针。
// 直接用 new 初始化
p1 := new(42)           // *int,指向的值是 42
p2 := new("hello")      // *string,指向的值是 "hello"
// 甚至支持函数返回值和复杂表达式
func getDefaultValue() int { return 100 }
p3 := new(getDefaultValue()) // *int,指向的值是 100
p4 := new(2 + 3)        // *int,指向的值是 5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions