Различия между оператором new() и оператором «&»
В Go функция new() и адрес памяти «&» Оба оператора используются для выделения памяти. Однако между их использованием есть некоторые тонкие различия.
Сравнение функций
Оператор new() и & возвращают указатель на вновь выделенный адрес памяти. Однако они различаются синтаксисом:
Тип Анализ
Как показано в приведенном примере кода, анализ отражения показывает, что и &Vector{}, и new(Vector) возвращают указатели одного и того же типа, поскольку оба являются указателями на экземпляры структуры Vector.
Историческая путаница
В списке рассылки Go ранее обсуждались опасения по поводу использования new() и & для распределения памяти, так как это может привести к путанице.
Особый случай
Стоит отметить, что new() — единственный метод получения указателя на безымянный базовый тип, например целое число. Это можно увидеть в следующем примере:
p := new(int) // valid p := &int{0} // invalid
Предпочтения и использование
В конечном счете, выбор между использованием new() и & для распределения памяти во многом зависит от личное предпочтение. Оба метода имеют одинаковую функциональность и дают одинаковые результаты. Однако важно помнить о тонких различиях между этими двумя операторами и использовать их соответствующим образом, исходя из конкретных требований.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3