One of the first things I thought of when I read this was Stackless Python. The channels in Go remind me a lot of Stackless Python, but that s likely because (a) I ve used it and (b) the language/thoughts that they actually came from I ve never touched.
I ve never attempted to use channels as IPC, but that s probably because the alternative is likely much safer. Here s some psuedocode:
program1
chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)
chan.send("Ahoy!")
program2
chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)
ahoy = chan.recv()
If you use a traditional IPC method, you can have channels at each side that wrap their communication on top of it. This leads to some issues in implementation, which I can t even think about how to tackle, and likely a few unexpected race conditions.
However, I agree; the ability to communicate via processes using the same flexibility of Go channels would be phenomenal (but I fear unstable).
Wrapping a simple socket with channels on each side gets you almost all of the benefits, however.