Я новичок на ходу Я хочу напечатать адрес переменной структуры в го здесь моя программа
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