That web.go handlers return a string severely handicaps its performance. It forces you to allocate for each http request, probably several times. For large responses this is crazy. The go http package lets you write directly to the tcp socket, and as such is capable of being way more efficient.