Skip to content

Instantly share code, notes, and snippets.

@alexedwards
Last active May 4, 2022
Embed
What would you like to do?
JSON encoding benchmarks
package main
import (
"encoding/json"
"net/http"
)
func main() {}
func healthcheckHandlerEncoder(w http.ResponseWriter, r *http.Request) {
data := map[string]string{
"status": "available",
"environment": "development",
"version": "1.0.0",
}
w.Header().Set("Content-Type", "application/json")
err := json.NewEncoder(w).Encode(data)
if err != nil {
http.Error(w, "The server encountered a problem and could not process your request", http.StatusInternalServerError)
}
}
func healthcheckHandlerMarshal(w http.ResponseWriter, r *http.Request) {
data := map[string]string{
"status": "available",
"environment": "development",
"version": "1.0.0",
}
js, err := json.Marshal(data)
if err != nil {
http.Error(w, "The server encountered a problem and could not process your request", http.StatusInternalServerError)
return
}
js = append(js, '\n')
w.Header().Set("Content-Type", "application/json")
w.Write(js)
}
package main
import (
"net/http"
"net/http/httptest"
"testing"
)
func BenchmarkEncoder(b *testing.B) {
w := httptest.NewRecorder()
r := new(http.Request)
for n := 0; n < b.N; n++ {
healthcheckHandlerEncoder(w, r)
}
}
func BenchmarkMarshal(b *testing.B) {
w := httptest.NewRecorder()
r := new(http.Request)
for n := 0; n < b.N; n++ {
healthcheckHandlerMarshal(w, r)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment