I hadn't come across that post that I can remember; a very nice explanation by Moxie. Thanks.
There is an official (albeit experimental) NaCl implementation for Go which would probably have both been simpler and stronger to use: https://godoc.org/golang.org/x/crypto/nacl
We are working on AES-GCM encryption.
Why did you use CBC? It's actually harder than crypto/cipher.AEAD, and what you're doing now seems insecure.
Because it is easy to use to separate UDP datagrams.
In what way? Are you relying on CBC padding to determine packet size?