我正在尝试编写一个对性能敏感的Go http处理程序(特别是我希望最小化使用的RAM量).处理程序为每个请求设置一堆标头.所有标题始终相同且具有相同的值.有没有办法const为所有标题使用单个并在一次调用中设置它们?
例.而不是为所有请求执行此操作:
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
Run Code Online (Sandbox Code Playgroud)
......做这样的事情:
const staticHeaders = `
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive`
w.Headers.WriteRaw(staticHeaders)
Run Code Online (Sandbox Code Playgroud)
那可能吗?
您可以劫持连接,并直接编写标头,但这只会节省一半的标头分配,因为传入的请求仍然会分配一个映射和字符串来填充Request结构.这也意味着从那时起你需要自己处理原始TCP连接.
您应该彻底剖析以确保标头分配实际上是您的应用程序的瓶颈.http请求的开销远远超过标头.
您也可以尝试其他的http堆栈,例如github.com/valyala/fasthttp,尽量减少分配.