What is the meaning of '*' and '&'?


I am doing the http://tour.golang.org/. Could anyone explain this function to me lines 1,3,5 and 7, especially what ‘*’ and ‘&’ do? By mentioning them in a function declaration, what are they supposed/expected to do? A toy example:

    1: func intial1(var1 int, var2 int, func1.newfunc[]) *callproperfunction {
    3:    addition:= make ([] add1, var1)
    4:    for i:=1;i<var2;i++ {
    5:       var2 [i] = *addtother (randomstring(lengthofcurrent))
    6:    }
    7:    return &callproperfunction {var1 int, var2 int, func1.newfunc[], jackpot}
    8: }

It seems that they are pointers like what we have in C++. But I cannot connect those concepts to what we have here. In other words, what ‘*’ an ‘&’ do when I use them in function declaration in Go.

I know what reference and dereference mean. I cannot understand how we can use a pointer to a function in Go? For example lines 1 and 7, what do these two lines do? The function named intial1 is declared that returns a pointer? And in line 7, we call it with arguments using the return function.


This is possibly one of the most confusing things in Go. There are basically 3 cases you need to understand:

The & Operator

& goes in front of a variable when you want to get that variable’s memory address.

The * Operator

* goes in front of a variable that holds a memory address and resolves it (it is therefore the counterpart to the & operator). It goes and gets the thing that the pointer was pointing at, e.g. *myString.

myString := "Hi"
fmt.Println(*&myString)  // prints "Hi"

or more usefully, something like

myStructPointer = &myStruct
// ...
(*myStructPointer).someAttribute = "New Value"

* in front of a Type

When * is put in front of a type, e.g. *string, it becomes part of the type declaration, so you can say “this variable holds a pointer to a string”. For example:

var str_pointer *string

So the confusing thing is that the * really gets used for 2 separate (albeit related) things. The star can be an operator or part of a type.

Answered By – Everett

Answer Checked By – Pedro (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.