«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > В чем разница между функцией «new()» и оператором адреса памяти «&» в Go?

В чем разница между функцией «new()» и оператором адреса памяти «&» в Go?

Опубликовано 8 ноября 2024 г.
Просматривать:412

What\'s the Difference Between the \

Различия между оператором new() и оператором «&»

В Go функция new() и адрес памяти «&» Оба оператора используются для выделения памяти. Однако между их использованием есть некоторые тонкие различия.

Сравнение функций

Оператор new() и & возвращают указатель на вновь выделенный адрес памяти. Однако они различаются синтаксисом:

  • v := &Vector{} использует оператор "&" для получения адреса пустой структуры Vector.
  • v := new( Vector) использует функцию new() для создания указателя на новую структуру Vector.

Тип Анализ

Как показано в приведенном примере кода, анализ отражения показывает, что и &Vector{}, и new(Vector) возвращают указатели одного и того же типа, поскольку оба являются указателями на экземпляры структуры Vector.

Историческая путаница

В списке рассылки Go ранее обсуждались опасения по поводу использования new() и & для распределения памяти, так как это может привести к путанице.

Особый случай

Стоит отметить, что new() — единственный метод получения указателя на безымянный базовый тип, например целое число. Это можно увидеть в следующем примере:

p := new(int) // valid
p := &int{0} // invalid

Предпочтения и использование

В конечном счете, выбор между использованием new() и & для распределения памяти во многом зависит от личное предпочтение. Оба метода имеют одинаковую функциональность и дают одинаковые результаты. Однако важно помнить о тонких различиях между этими двумя операторами и использовать их соответствующим образом, исходя из конкретных требований.

Заявление о выпуске Эта статья перепечатана по адресу: 1729661717. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3