That one is an excellent implementation, which feels really like Go. It just misses default cases,
which are not recommended in such protocols anyway.
If your primary code base it Go and you just want to make it easy for others to connect, that pure Go one is highly recommended.
You can use normal readers and writers with it and have no additional transport and buffering layers generated and added, which Go already has.
It also needs nothing besides Go itself and generates Code which can be augmented with further struct tags
But if Go is just another use case you have to support and your main code base is PHP, Ruby, Java, Python and whatever, I would recommend to use the thrift compiler mentioned in other posts,
as it provides the same tooling for every language supported.