Как получить адрес памяти встроенного фрагмента в структуре? - PullRequest
1 голос
/ 05 июня 2019

Как я могу получить адрес памяти встроенного слайса в структуре?

Пример:

type t1 struct {
    data string
}

type t2 struct {
    listData []t1
}

Теперь я хочу узнать адрес памяти listData.Я не мог понять, как извлечь из него адрес памяти, используя следующее:

newData := t2{}
newData.listData = append(newData.listData, t1{data:"mydata"})
printf("%p", &newData.listData) // this doesn't work, in fact it returns address of newData

1 Ответ

3 голосов
/ 05 июня 2019

listData является первым полем в структуре, его смещение памяти относительно адреса структуры равно нулю, поэтому они имеют одинаковый адрес.

type t2 struct {
listData []string
moreData []int
}

func main() {
    var foo t2
    fmt.Printf("%p %p %p", &foo, &foo.listData, &foo.moreData)
}

0x43e260 0x43e260 0x43e26c

https://play.golang.org/p/FVMujcUHHYq

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