Иногда бывает сложно сказать «почему» что-то определенным образом, но это поведение указано в документации fmt
пакета . По какой-либо причине формат по умолчанию для указателя на простой объект, такой как целое число, равен %p
(ячейка памяти в шестнадцатеричном виде с начальным значением 0x
), в то время как формат по умолчанию для указателя на составной объект, такой как Карта &
плюс формат по умолчанию для составного объекта.
Но это всего лишь формат по умолчанию (%v
), который генерирует fmt.Println
. Если вы хотите напечатать адрес карты, вы можете переключиться на fmt.Printf
(что позволяет указать строку произвольного формата) и явно использовать %p
:
fmt.Printf("%p\n", &m)