Выделение: new (Foo) vs Foo {}

В чем разница между следующими синтаксисами для создания объекта? Почему 2 разных метода, если результат одинаковый?

type Foo struct {
    X int
}

f1 := &Foo{}
f2 := new(Foo)

Ответ 1

Использование new является единственным способом прямого возврата указателя на нативного типа (int, float64, uint32,...) без создания нормальной переменной, а затем возврата указателя на него.

Там больше обсуждается это на https://groups.google.com/forum/#!topic/golang-nuts/K3Ys8qpml2Y и https://groups.google.com/forum/#!topic/golang-nuts/GDXFDJgKKSs, но в основном это бесполезно.

Цитата Дэйва Чейни:

новый не уходит, он не может, это часть гарантированного спецификация для Go 1.

Вам не нужно использовать его, большинство людей этого не делают, но это не значит, что это не используется.