I am struggling to understand exactly what is happening when you return a new object from a function in go.
I have this
func createPointerToInt() *int {
    i := new(int)
    fmt.Println(&i);
    return i;
}
func main() {
    i := createPointerToInt();
    fmt.Println(&i);
}
The values printed returned are
0x1040a128
0x1040a120
I would expect these two values to be the same. I do not understand why there is an 8 byte difference.
In what I see as the equivalent C code:
int* createPointerToInt() {
    int* i = new int;
    printf("%#08x\n", i);
    return i;
}
int main() {
    int* r = createPointerToInt();
    printf("%#08x\n", r);
    return 0;
}
The address returned is the same:
0x8218008
0x8218008
Am I missing something blindingly obvious here? Any clarification would be greatly appreciated!
You are printing the address of the pointer here fmt.Println(&i);. Try this:
func main() {
    i := createPointerToInt();
    fmt.Println(i); //--> Remove the ampersand
}
i is the pointer returned from createPointerToInt - while &i is the address of the pointer you are trying to print. Note in your C sample you are printing it correctly:
printf("%#08x\n", r);
                 ^No ampersand here
                        Change &i to i. You are printing address of i while you should print the value of i.
func createPointerToInt() *int {
     i := new(int)
     fmt.Println(i);
     return i;
}
func main() {
    i := createPointerToInt();
    fmt.Println(i);
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With