Source: http://www.csc.kth.se/utbildning/kth/kurser/DD1339/inda14/lecture/PDF/lecture07b-intro-to-go.pdf