Pointers in Go Programming

Welcome to part 4 of the Go programming tutorial series. In the previous tutorial, we covered some function basics. Now, we're going to cover the last basic concept before creating a simple web app, which is pointers. Pointers allow you to reference from memory, which lets you do some interesting things. Let's do a basic run-through.

We'll start by defining a variable:

package main

import "fmt"

func main() {
	x := 15

If we want to point to x, we can use the & symbol, like so:

a := &x

This gives us the memory address, so if we do:


This should output: 0xc0420441c0. We can read through pointers using * before the variable. For example:

package main

import "fmt"

func main() {
	x := 15

	a := &x         // point to x 

Giving us:


Okay, so what's the point of this? Well, what if we re-defined the reading through of a?

	*a = 5

The a variable was just a memory address, and the asterisk gets us to read through to the memory address, when we combine these two, we can actually modify the value at that memory address. Thus:


Gives us: 5

So, what might happen with:

	*a = *a**a

Now what is the value of x? You shoudl be able to do it in your head. If not...


Now, how might you get the memory address using x and a?


Full code up to this point:

package main

import "fmt"

func main() {
	x := 15
	a := &x         // point to x  (memory address)
	fmt.Println(a)  // prints out the mem addr.
	fmt.Println(*a) // read a through the pointer, so this will print out a value (15 in this case)
	*a = 5          // sets the value pointed at to 5, which means x is modified (since x is stored at the mem addr)
	fmt.Println(x)  // see the new value of x
	*a = *a**a      // what is the value of x now? 
	fmt.Println(x)  // prints a value
	fmt.Println(*a) // prints a value

	fmt.Println(&x) // prints a memory address
	fmt.Println(a)      // prints a memory address

The next tutorial:

  • Introduction to the Go Programming Language
  • Go Language Syntax
  • Go Language Types
  • Pointers in Go Programming
  • Simple Web App in Go Programming
  • Structs in the Go Programming Language
  • Methods in Go Programming
  • Pointer Receivers in Go Programming
  • More Web Dev in Go Language
  • Acessing the Internet in Go
  • Parsing XML with Go Programming
  • Looping in Go Programming
  • Continuing our Go Web application
  • Mapping in Golang
  • Mapping Golang sitemap data
  • Golang Web App HTML Templating
  • Applying templating to our Golang web app
  • Goroutines - Concurrency in Goprogramming
  • Synchronizing Goroutines - Concurrency in Golang
  • Defer - Golang
  • Panic and Recover in Go Programming
  • Go Channels - Concurrency in Go
  • Go Channels buffering, iteration, and synchronization
  • Adding Concurrency to speed up our Golang Web Application