JSON and Data Exchange
Struct Tags
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
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)
}
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}
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}
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}