Вкратце: вы не можете.
сообщение об ошибке говорит:
не может взять адрес к
Существуют ограничения на операнд-адрес оператора &
. Spec: Address operators:
Для операнда x
типа T
, операция адрес &x
генерирует указатель типа *T
к x
. Операнд должен быть адресуемым, то есть переменная, указатель указателя или операция индексации фрагментов; или селектор поля адресного структурного операнда; или операцию индексирования массива адресного массива. В качестве исключения для требования адресности, x
также может быть (возможно, в скобках) composite literal. Если оценка x
вызовет run-time panic, то также будет выполнена оценка &x
.
Константы не в списке адресуемых, и вещи, которые не перечислены в спецификации, как адресацией (цитированной выше) не может быть операндом адреса оператора &
(вы не можете возьмите их адрес).
Нельзя принимать адрес постоянной. Это по двум причинам:
- У константы может не быть адреса вообще.
- И даже если постоянное значение сохраняется в памяти во время выполнения, это должно помочь во время выполнения поддерживать константы, которые: константа. Если вы можете принять адрес постоянного значения, вы можете назначить адрес (указатель) переменной, и вы можете изменить его (указанное значение, значение константы).
Если вам нужен указатель на значение, равное этой константе, назначьте его переменной, которая адресуется, чтобы вы могли принять ее адрес, например.
func main() {
const k = 5
v := k
address := &v // This is allowed
}
Но знайте, что числовые константы Go представляют значения произвольной точности и не переполняются. Когда вы назначаете значение константы переменной, она может оказаться невозможной (например, константа может быть больше максимального значения типа переменной, которую вы назначаете, что приводит к ошибке времени компиляции), или может не будет одинаковым (например, в случае констант с плавающей запятой, он может потерять точность).
поэтому мы не можем найти адрес константы :) – Arvind