All channel operations are thread-safe and atomic.
The "Share Memory by Communicating" code walk gives an overview of an
idiomatic concurrent Go program:
http://golang.org/doc/codewalk/sharemem/
There's the sync package, which provides a Mutex primitive:
http://golang.org/pkg/sync/
There's this reference document, The Go Memory Model:
http://golang.org/doc/go_mem.html
The netchan package allows you to use channels to communicate over
network sockets:
http://golang.org/pkg/netchan/
The rpc package provides a different method of abstracting network
communication:
http://golang.org/pkg/rpc/
I hope that's enough to get you started. Feel free to ask further
questions here on in the irc channel, #go-nuts on irc.freenode.net.
:-)
Andrew