Skip to content

Instantly share code, notes, and snippets.

@krishbhanushali
Last active July 19, 2019 22:10
Show Gist options
  • Save krishbhanushali/f715cfac6ee9717ce323ca7777c466e1 to your computer and use it in GitHub Desktop.
Save krishbhanushali/f715cfac6ee9717ce323ca7777c466e1 to your computer and use it in GitHub Desktop.
This is a gist about benchmarking Go Marshaling, Unmarshaling, Encoding and Decoding
package main
import (
"encoding/json"
"fmt"
"os"
"strings"
"testing"
)
type TB testing.B
func BenchmarkMarshaling(b *testing.B) {
b.StopTimer()
type Employee struct {
EmployeeID int `json:"employee_id"`
EmployeeName string `json:"employee_name"`
EmployeeEmailAddress string `json:"employee_email_address"`
}
employees := []Employee{
Employee{
EmployeeID: 1,
EmployeeName: "XYZ",
EmployeeEmailAddress: "xyz@pqr.com",
},
Employee{
EmployeeID: 2,
EmployeeName: "ABC",
EmployeeEmailAddress: "abc@pqr.com",
},
}
b.StartTimer()
encoder := json.NewEncoder(os.Stdout)
encoder.Encode(employees)
}
func BenchmarkUnmarshaling(b *testing.B) {
b.StopTimer()
jsonData := []byte(`[{"EmployeeID":1,"EmployeeName":"XYZ","EmployeeEmailAddress":"xyz@pqr.com"},{"EmployeeID":2,"EmployeeName":"ABC","EmployeeEmailAddress":"abc@pqr.com"}]`)
type Employee struct {
EmployeeID int
EmployeeName string
EmployeeEmailAddress string
}
var employees []Employee
b.StartTimer()
err := json.Unmarshal(jsonData, &employees)
if err != nil {
fmt.Println("error: ", err)
}
//fmt.Printf("%+v", employees)
}
func BenchmarkEncoder(b *testing.B) {
b.StopTimer()
type Employee struct {
EmployeeID int `json:"employee_id"`
EmployeeName string `json:"employee_name"`
EmployeeEmailAddress string `json:"employee_email_address"`
}
employees := []Employee{
Employee{
EmployeeID: 1,
EmployeeName: "XYZ",
EmployeeEmailAddress: "xyz@pqr.com",
},
Employee{
EmployeeID: 2,
EmployeeName: "ABC",
EmployeeEmailAddress: "abc@pqr.com",
},
}
b.StartTimer()
encoder := json.NewEncoder(os.Stdout)
encoder.Encode(employees)
}
func BenchmarkDecoder(b *testing.B) {
b.StopTimer()
jsonData := `[{"EmployeeID":1,"EmployeeName":"XYZ","EmployeeEmailAddress":"xyz@pqr.com"},{"EmployeeID":2,"EmployeeName":"ABC","EmployeeEmailAddress":"abc@pqr.com"}]`
type Employee struct {
EmployeeID int
EmployeeName string
EmployeeEmailAddress string
}
var employees []Employee
b.StartTimer()
decoder := json.NewDecoder(strings.NewReader(jsonData))
if err := decoder.Decode(&employees); err != nil {
fmt.Println("error:", err)
}
//fmt.Printf("%v", employees)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment