Struct tags document the JSON field names used for exported Go fields.

struct tags JSON tags let a Go struct keep Go-style field names while publishing JSON-style field names.

Struct Tags

sku
struct_tags.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"strconv"
)

type Product struct {
	SKU     string `json:"sku"`
	InStock bool   `json:"in_stock"`
}

func main() {
	var sku = "book-1"
	product := Product{SKU: sku, InStock: true}

	text := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU), product.InStock)

	fmt.Println("sku=", product.SKU)
	fmt.Println("inStock=", product.InStock)
	fmt.Println("json=", text)
}
package main

import (
	"fmt"
	"strconv"
)

type Product struct {
	SKU     string `json:"sku"`
	InStock bool   `json:"in_stock"`
}

func main() {
	var sku = "pen-2"
	product := Product{SKU: sku, InStock: true}

	text := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU), product.InStock)

	fmt.Println("sku=", product.SKU)
	fmt.Println("inStock=", product.InStock)
	fmt.Println("json=", text)
}
package main

import (
	"fmt"
	"strconv"
)

type Product struct {
	SKU     string `json:"sku"`
	InStock bool   `json:"in_stock"`
}

func main() {
	var sku = "mug-3"
	product := Product{SKU: sku, InStock: true}

	text := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU), product.InStock)

	fmt.Println("sku=", product.SKU)
	fmt.Println("inStock=", product.InStock)
	fmt.Println("json=", text)
}
  1. sku ← "book-1", product ← main.Product{SKU:"book-1", InStock:true}

    13func main() {14  var sku→ "book-1" = "book-1" //@sku="pen-2", "mug-3"15  product→ main.Product{SKU:"book-1", InStock:true} := Product{SKU: sku"book-1", InStock: true}1617  text→ "{\"sku\":\"book-1\",\"in_stock\":true}" := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU"book-1"), product.InStocktrue)1819  fmt.Println("sku=", product.SKU"book-1")20  fmt.Println("inStock=", product.InStocktrue)21  fmt.Println("json=", text"{\"sku\":\"book-1\",\"in_stock\":true}")22}
    outputsku= book-1
    inStock= true
    json= {"sku":"book-1","in_stock":true}
  1. sku ← "pen-2", product ← main.Product{SKU:"pen-2", InStock:true}

    13func main() {14  var sku→ "pen-2" = "pen-2"15  product→ main.Product{SKU:"pen-2", InStock:true} := Product{SKU: sku"pen-2", InStock: true}1617  text→ "{\"sku\":\"pen-2\",\"in_stock\":true}" := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU"pen-2"), product.InStocktrue)1819  fmt.Println("sku=", product.SKU"pen-2")20  fmt.Println("inStock=", product.InStocktrue)21  fmt.Println("json=", text"{\"sku\":\"pen-2\",\"in_stock\":true}")22}
    outputsku= pen-2
    inStock= true
    json= {"sku":"pen-2","in_stock":true}
  1. sku ← "mug-3", product ← main.Product{SKU:"mug-3", InStock:true}

    13func main() {14  var sku→ "mug-3" = "mug-3"15  product→ main.Product{SKU:"mug-3", InStock:true} := Product{SKU: sku"mug-3", InStock: true}1617  text→ "{\"sku\":\"mug-3\",\"in_stock\":true}" := fmt.Sprintf(`{"sku":%s,"in_stock":%t}`, strconv.Quote(product.SKU"mug-3"), product.InStocktrue)1819  fmt.Println("sku=", product.SKU"mug-3")20  fmt.Println("inStock=", product.InStocktrue)21  fmt.Println("json=", text"{\"sku\":\"mug-3\",\"in_stock\":true}")22}
    outputsku= mug-3
    inStock= true
    json= {"sku":"mug-3","in_stock":true}