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

GO Языковой указатель метод приемника изменять не указанное значение? Подробное объяснение

Опубликовано в 2025-03-11
Просматривать:197

Why Does Go's Method with a Pointer Receiver Seem to Modify Non-Pointer Values?

метод с помощью Pointer Receiver

В туре Go, упражнение 51 исследует приемники метода. Предоставленное объяснение гласит, что метод масштаба, который работает на указателе на вершину, не влияет, когда он напрямую получает значение вершины. Однако изменение основной функции для передачи не указанной вершины противоречит этому утверждению.

почему расхождение?

, несмотря на код, получающий не указанное значение, масштаб успешно изменяет переменную. Такое поведение может быть связано с сильной системой печати Go. Когда в определенном контексте ожидается указатель на T, только указатель на t (*t) может удовлетворить это требование.

в компиляторе используется закулисное преобразование, чтобы включить это поведение:

«Вызов метода x.m (), если набор метода (тип) x содержит m, может быть назначен параметров, I, if of a, x service of x. Набор методов и X содержит m, x.m () является сокращением для (& x) .m (): "

По сути, компилятор переписывает код, чтобы передать указатель, не указанный на значении, когда у приемной переменной есть тип приемника. Это позволяет методу шкалы изменить исходную переменную.

]
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3