http://play.golang.org/p/53jSv32wSF
(You can't access the filesystem on the playground, so it doesn't run.)
* Look at that error handling. Mmmmhmmm, clear and explicit. If something goes wrong, I'll know about it.
* Apart from, of course, errors that I ignore, such as when converting the year from 4 chars to an int (line 54). I don't care if I can't parse that.
* Note the difference (lines 54, 56) between parsing the track (which is a byte), and the year, written as 4 digits. The byte can just be cast to an int, the string needs to be parsed by the strconv package.
* I have a little bit of defensive programming in the form of a panic(), which would tell me if something that I thought was impossible has happened.
* defer on line 19 makes sure the file closes if we managed to open it, regardless of when we return.
* type casts are explicit, even from int to int64 (line 20)
* I don't specify which interfaces a type implements, the compiler handles that all for me.
* Parse() returns map[string]interface{}, which allows me to store anything (in this case just ints and strings) in a key-value store.
* A type-safe printf! "%v" (line 67) uses reflection to look at the type of the argument and deduce the natural format. So I can pass it an int or a string and it works :)
* On line 86 I pass this weird new type to a printf function and it goes ahead and uses the String() method that we defined. If we hadn't defined that we'd get a printout of the type, which in this case would be the 128 bytes we read.