Vahid Hashemi
Vahid Hashemi

Reputation: 5240

How to get memory address of an embedded slice in a struct?

How can I get the memory address of an embedded slice in a struct?

Example:

type t1 struct {
    data string
}

type t2 struct {
    listData []t1
}

Now I want to know the memory address of listData. I couldn't figure out how to get the memory address out of it using the following:

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

Upvotes: 1

Views: 53

Answers (1)

Adrian
Adrian

Reputation: 46433

listData is the first field in the struct, its memory offset relative to the struct's address is zero, so they have the same address.

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

Upvotes: 3

Related Questions