Go中的new(Struct)和&Struct {}有什么区别?

all*_*ode 9 go

他们似乎是一样的:

package main

import "fmt"

type S struct {
    i int
}

func main() {
  var s1 *S = new(S)
  fmt.Println(s1)

  var s2 *S = &S{}
  fmt.Println(s2)  // Prints the same thing.
}
Run Code Online (Sandbox Code Playgroud)

更新:

嗯.我刚刚意识到没有明显的方法来使用new初始化Si.有没有办法做到这一点?new(S{i:1})似乎不起作用:/

Woo*_*Moo 9

文档:

作为限制情况,如果复合文字根本不包含任何字段,则会为该类型创建零值.表达式new(File)和&File {}是等效的.

  • @ThomasAhle怎么样`x:= 5`对`var x = 5`对`var x int = 5`对`var x int; x = 5`?它不乏重叠和冗余的方法来做同样的事情,尽管在许多情况下可以提供一组丰富的习语以尽可能准确地表达程序员的意图. (2认同)