Я читал на веб-сайте golang, что uintptr хранит неинтерпретированные биты значения указателя, вид anwsers, который я нашел в Интернете, был очень запутанным. Кто-то, пожалуйста, объясните это мне простыми словами.Что это значит, когда мы говорим, что uintptr хранит неинтерпретированные биты значения указателя?
Что это значит, когда мы говорим, что uintptr хранит неинтерпретированные биты значения указателя?
ответ
Короткий ответ: он используется, когда вам нужно использовать адрес, как будто это номер.
Go - это собранный мусором язык. Go всегда точно знает, когда вещь является указателем, и когда это просто значение. Go нуждается в этих знаниях, чтобы искать старые неиспользованные ценности, которые он может освободить. Указатели также являются специальными в Go в том, что вы не можете просто добавить число к указателю, как вы делали бы в C.
Но иногда, когда вы работаете со встроенными системами или какие-то низкоуровневые библиотеки, где вам нужно чтобы добавить или вычесть из адреса, вам нужно сказать Go, что он не должен проверять этот указатель, потому что он не указывает на что-либо полезное на данный момент. Вы просто хотите использовать этот адрес, как если бы это был номер, и добавить/вычесть другое число.
Здесь вы можете использовать uintptr
. Этот тип может содержать любое значение указателя (любой адрес), а когда вы вставляете в него адрес, Go не видит его как указатель, поэтому вы можете делать с ним все, что хотите.
Спасибо, это было действительно полезно .. :) –