tl;dr; you're passing a slightly invalid slice. I've fixed it here:
Longer version: you're getting N bytes of 0s, and then appending the encrypted text to that, and calling that the encrypted text. When you try to decrypt it, the authentication fails, for obvious reasons.
Cheers,
Sanjay
PS. For one-of encryption like this, you can just pass nil as the dst, and it'll return a newly allocated slice with your ciphertext. The "pass a slice to be appended to" pattern allows this use-case, and if you're just going to allocate right before the method, then you might as well let it happen inside the method.