implement lazyfoo.net tutorial in go