Как напечатать адрес структурной переменной в go - PullRequest
0 голосов
/ 13 мая 2019

Я новичок на ходу. Я хочу напечатать адрес переменной структуры в го, вот моя программа

type Rect struct {
 width int
 name int 
}

func main() {
 r := Rect{4,6}
 p := &r
 p.width = 15

fmt.Println("-----",&p,r,p,&r)

}

вывод этого

  _____0x40c130 {15 6} &{15 6} &{15 6}

, но я хочу напечататьадрес переменной r, так как я знаю, что '&' представляет адрес, а '*' указывает значение местоположения указателя, но здесь я не могу напечатать адрес r, я использую онлайн-редактор go-lang https://play.golang.org/

Также я хочу сохранить этот адрес в некоторой переменной.

1 Ответ

4 голосов
/ 13 мая 2019

При печати значений с использованием fmt.Println() будет использоваться формат по умолчанию.Цитирование из пакета документов fmt:

Формат по умолчанию для% v:

bool:                    %t
int, int8 etc.:          %d
uint, uint8 etc.:        %d, %#x if printed with %#v
float32, complex64, etc: %g
string:                  %s
chan:                    %p
pointer:                 %p

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

struct:             {field0 field1 ...}
array, slice:       [elem0 elem1 ...]
maps:               map[key1:value1 key2:value2 ...]
pointer to above:   &{}, &[], &map[]

Адрес значения структуры является последней строкой, поэтому он обрабатывается специальным образом и, таким образом, печатается с использованием синтаксиса &{}.

Если вы хотите напечатать его адрес, не используйте формат по умолчанию, но используйте строку формата и укажите, что вы хотите адрес (указатель) явно с помощью глагола %p:

fmt.Printf("%p\n", &r)

Будет выведено (попробуйте на Go Playground ):

0x414020
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...