I have written a package with Go bindings for ZeroMQ.
http://github.com/pebbe/zmq3
There may be a potential problem, which I haven't encountered
yet, but may exist anyway.
The thing is, a ZeroMQ socket, the main object type that is used
in most operations, is not thread safe. The FAQ says:
a socket may be shared if and only if each thread executes a
full memory barrier before accessing the socket
http://www.zeromq.org/area:faq#toc5
What is this "full memory barrier", and does Go execute it, and
at what moments?
Before switching to another goroutine?
Before switching to another thread?
Before moving a goroutine from one thread to another?
Before calling a C function?
Is there a way to force the execution of a full memory barrier?
--
Peter Kleiweg
my Go programming cookbook:
http://www.let.rug.nl/~kleiweg/go/