A Go struct can be represented as JSON text with field names and values.

marshal Marshaling is the idea of turning structured data into a JSON string that can be exchanged with another program.

Marshal Struct

name
marshal_struct.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"strconv"
)

type Badge struct {
	Name   string
	Points int
}

func main() {
	var name = "Ada"
	badge := Badge{Name: name, Points: 7}

	text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
	fmt.Println("name=", badge.Name)
	fmt.Println("points=", badge.Points)
	fmt.Println("json=", text)
}
package main

import (
	"fmt"
	"strconv"
)

type Badge struct {
	Name   string
	Points int
}

func main() {
	var name = "Grace"
	badge := Badge{Name: name, Points: 7}

	text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
	fmt.Println("name=", badge.Name)
	fmt.Println("points=", badge.Points)
	fmt.Println("json=", text)
}
package main

import (
	"fmt"
	"strconv"
)

type Badge struct {
	Name   string
	Points int
}

func main() {
	var name = "Linus"
	badge := Badge{Name: name, Points: 7}

	text := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name), badge.Points)
	fmt.Println("name=", badge.Name)
	fmt.Println("points=", badge.Points)
	fmt.Println("json=", text)
}
  1. name ← "Ada", badge ← main.Badge{Name:"Ada", Points:7}, text ← "{\"name\":\"Ada\",\"points\":7}"

    13func main() {14  var name→ "Ada" = "Ada" //@name="Grace", "Linus"15  badge→ main.Badge{Name:"Ada", Points:7} := Badge{Name: name"Ada", Points: 7}1617  text→ "{\"name\":\"Ada\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Ada"), badge.Points7)18  fmt.Println("name=", badge.Name"Ada")19  fmt.Println("points=", badge.Points7)20  fmt.Println("json=", text"{\"name\":\"Ada\",\"points\":7}")21}
    outputname= Ada
    points= 7
    json= {"name":"Ada","points":7}
  1. name ← "Grace", badge ← main.Badge{Name:"Grace", Points:7}, text ← "{\"name\":\"Grace\",\"points\":7}"

    13func main() {14  var name→ "Grace" = "Grace"15  badge→ main.Badge{Name:"Grace", Points:7} := Badge{Name: name"Grace", Points: 7}1617  text→ "{\"name\":\"Grace\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Grace"), badge.Points7)18  fmt.Println("name=", badge.Name"Grace")19  fmt.Println("points=", badge.Points7)20  fmt.Println("json=", text"{\"name\":\"Grace\",\"points\":7}")21}
    outputname= Grace
    points= 7
    json= {"name":"Grace","points":7}
  1. name ← "Linus", badge ← main.Badge{Name:"Linus", Points:7}, text ← "{\"name\":\"Linus\",\"points\":7}"

    13func main() {14  var name→ "Linus" = "Linus"15  badge→ main.Badge{Name:"Linus", Points:7} := Badge{Name: name"Linus", Points: 7}1617  text→ "{\"name\":\"Linus\",\"points\":7}" := fmt.Sprintf(`{"name":%s,"points":%d}`, strconv.Quote(badge.Name"Linus"), badge.Points7)18  fmt.Println("name=", badge.Name"Linus")19  fmt.Println("points=", badge.Points7)20  fmt.Println("json=", text"{\"name\":\"Linus\",\"points\":7}")21}
    outputname= Linus
    points= 7
    json= {"name":"Linus","points":7}