Наверное, лучший способ спросить - это люди, которые над этим работают; именно то, что я сделал !
Tl; dr: он был там раньше make
и до &{}
сих пор, и это все еще функция, которую можно использовать в некоторых ситуациях.
В основном, здесь приведены наиболее важные части:
Так в чем же причина нового? Это что-то полезное? Должны ли мы использовать это?
Вы не можете сделать это без нового
v := new(int)
*v++
fmt.Println(*v)
new не является заголовком Go, вы не найдете его часто используемым, но когда вам это нужно, он есть.
ура
Дейв
После другого ответа, показывающего такое решение:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Я попросил дальнейших разъяснений:
Так что, в сущности, точка зрения Дейва не соответствует действительности?
Есть места, где неудобно вставлять новую переменную просто для того, чтобы взять ее адрес.
new (T) имеет непосредственное прямое значение, а не является многоэтапной идиомой.
Точка зрения Дейва только падает, если сама техническая возможность (обойтись без
new
) неотразима сама по себе.
Разве это не обсуждалось, потому что было просто очевидно, что в Go это должно быть, потому что это есть почти на каждом языке?
"Мы будем держать new
?" обсуждение всплывает время от времени. Так как мы не можем взять его до Go 2, если я правильно понимаю Обещание, похоже, что от повторения цикла не так уж много; к тому моменту, когда Go 2 станет более продуманным, у нас может появиться несколько других и лучших идей ...
Крис
Это также там в основном по историческим причинам:
вам нужно рассмотреть историю проекта. Я думаю, что новое вводится в первую очередь, прежде чем есть сделать.
Это правда. На самом деле мы боролись некоторое время, прежде чем придумать идею сделать. Если вы посмотрите журналы репозитория, то увидите, что make появляется только в январе 2009 года, версия 9a924177598f.
Новая встроенная функция также предшествовала идее & {} для получения адреса составного литерала (и этот синтаксис в некотором смысле неправильный; вероятно, это должны быть (* T) {поля T}, но их было недостаточно причина поменять это).
Новая функция не является строго необходимой, но код, похоже, использует ее на практике. С этим трудно избавиться.
Ян