"An aside - would there be any benefit to using `go` rather than `c` for writing something like varnish if you were starting in 2012?"
go isn't fast yet, from what I can tell. So, you'd be writing a slow proxy, for the time being.
But, from a simplicity of design perspective, yes, it'd be awesome to work in a language with really good concurrency primitives. Proxies are an ideal example of an embarrassingly parallel problem; a thousand simultaneous users is a thousand independent tasks with very little shared state. go is designed for exactly this sort of task. And, in five years, by which time go will probably be really fast, you'll have a simple and fast proxy server.
Go's pretty damn fast now. It's fast enough that we've got physicists writing simulations in it. It's fast enough that a lot of the people I know (systems and HPC guys) just write in Go unless they have to write in anything else. I've personally used it to write cluster management tools, a cpu-intensive simulation, a modem emulator, and a decent handful of servers.
If nothing else, it's so easy to do concurrency that I end up hiding a lot of slowness.
Is it pure Go, or are they offloading the more demanding computations to external libraries written in other languages, like people tend to do with Python?
Sadly not available yet, sorry. It's a hassle to get new projects open-sourced, and given that HPC codes traditionally require that you have a million-dollar supercomputer anyway...
go isn't fast yet, from what I can tell. So, you'd be writing a slow proxy, for the time being.
But, from a simplicity of design perspective, yes, it'd be awesome to work in a language with really good concurrency primitives. Proxies are an ideal example of an embarrassingly parallel problem; a thousand simultaneous users is a thousand independent tasks with very little shared state. go is designed for exactly this sort of task. And, in five years, by which time go will probably be really fast, you'll have a simple and fast proxy server.