A low level APNS library for Go with an emphasis on being fast and efficient
While this library is (fairly) stable, it needs to be battle tested before really relying heavily on it. That being said, use it, break it, and I would love any testing that you can throw at it
When it comes to APNS libraries, most of them make some fatal mistakes. Those mistakes tend to boil down to: not handling the latest guidelines from Apple, relying on inefficient networking, or not handling errors in the ways Apple requires you to. go-libapns tries to be a simple low level interface that should be able to handle large amounts of push notifications in a CPU, Memory, and Network effecient manner. go-libapns also looks to be prepared for the future, with the impending expansion of the APNS payload and new fields, the code is mostly setup to handle these new featues.
go-libapns is open source and the code is on github. Feel free to submit pull requests and bug reports.
go get github.com/joekarl/go-libapns
Due to Apple's streaming protocol, errors are a bit tricky to handle correctly. However by following a few simple guidelines, go-libapns will do the heavy lifting for you, allowing you to focus on what you want to do when an error occurs.