Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print out pointer variable correctly in golang

Tags:

pointers

go

type person struct{}
var tom *person = &person{}

enter image description here

When I use

fmt.Printf("%+v\n", tom)//prints:&{}

Why the result is & plus data?It is surposed to be an address(0x0055)

When I use

fmt.Printf("%+v\n", &tom)//0x0038
fmt.Printf("%p\n", &tom)//0x0038

It gives me an address,it gives me 0x0038,why %v and %p has the same result?

like image 605
Dew Avatar asked Apr 17 '14 15:04

Dew


People also ask

How do I print a pointer value in Go?

In function byval , using pointer q ( *int ), which is a copy of pointer p ( *int ), integer *q ( i ) is set to a new int value 4143 . At the end before returning. the pointer q is set to nil (zero value), which has no effect on p since q is a copy.

How do I print a pointer variable?

You can print a pointer value using printf with the %p format specifier. To do so, you should convert the pointer to type void * first using a cast (see below for void * pointers), although on machines that don't have different representations for different pointer types, this may not be necessary.

How do I declare a pointer variable in Golang?

You can also use the shorthand (:=) syntax to declare and initialize the pointer variables. The compiler will internally determine the variable is a pointer variable if we are passing the address of the variable using &(address) operator to it. Example: Go.


1 Answers

tom is a pointer to a person. When you use &tom, you're a creating a second pointer, this a pointer to a pointer to a person.

In your first example, you're using %+v to print the default value of tom. The default value deferences the pointer and prints the struct itself.

In your second example, %+v is applying to the "double" pointer. It still deferences the pointer, getting to the initial pointer. See this example: http://play.golang.org/p/IZThhkiQXM

like image 53
Vitor De Mario Avatar answered Sep 29 '22 06:09

Vitor De Mario