Как напечатать адрес структурной переменной в go

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

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 ответ


Когда вы печатаете значения с помощью 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
", &r)

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

0x414020

Есть идеи?

10000