I am trying to create a map of addresses of objects that I create with the time at which it is allocated. The key is the address returned by the call to new(). How do I get the address returned by new()?
type T struct{a, b int }
func main(){
var t int64 = time.Nanoseconds()
memmap := make(map[uint8]int64)
fmt.Printf("%d\n", t)
var ptr *T = new(T)
ptr.a = 1
ptr.b = 2
fmt.Printf("%d %d %p %T\n", ptr.a, ptr.b, ptr, ptr)
//memmap[ptr] = t //gives error
//var temp uint8 = ptr//gives error
}
Please tell me what should be the type of the key field in the map so that I can store the address returned by new()? I plan to use new() with different types, get the allocated address and map it with the creation time.
You can use the type
Pointerfrom theunsafepackage, but that is, the package name implies it, unsafe. The address itself is a opaque thing and there’s only little use in actually using a address value alone for a map, better use a tuple of type and address. That’s whatunsafe.Reflectdoes provide you. The packagereflectoffers you the functionUnsafeAddrand a lot more.I suggest you read the package documentation for
reflectandunsafepackages.