Structs group named fields into one value.

struct field A struct field stores one named part of a larger value.

Structs

age
structs_intro.go
Replay: real traced execution (multi-file project)
package main

import "fmt"

type User struct {
	Name string
	Age  int
}

func main() {
	var age = 30
	user := User{Name: "Ada", Age: age}
	label := fmt.Sprintf("%s:%d", user.Name, user.Age)

	fmt.Println("name=", user.Name)
	fmt.Println("age=", user.Age)
	fmt.Println("label=", label)
}
package main

import "fmt"

type User struct {
	Name string
	Age  int
}

func main() {
	var age = 18
	user := User{Name: "Ada", Age: age}
	label := fmt.Sprintf("%s:%d", user.Name, user.Age)

	fmt.Println("name=", user.Name)
	fmt.Println("age=", user.Age)
	fmt.Println("label=", label)
}
package main

import "fmt"

type User struct {
	Name string
	Age  int
}

func main() {
	var age = 42
	user := User{Name: "Ada", Age: age}
	label := fmt.Sprintf("%s:%d", user.Name, user.Age)

	fmt.Println("name=", user.Name)
	fmt.Println("age=", user.Age)
	fmt.Println("label=", label)
}
  1. age ← 30, user ← main.User{Name:"Ada", Age:30}, label ← "Ada:30"

    10func main() {11  var age→ 30 = 30 //@age=18, 4212  user→ main.User{Name:"Ada", Age:30} := User{Name: "Ada", Age: age30}13  label→ "Ada:30" := fmt.Sprintf("%s:%d", user.Name"Ada", user.Age30)1415  fmt.Println("name=", user.Name"Ada")16  fmt.Println("age=", user.Age30)17  fmt.Println("label=", label"Ada:30")18}
    outputname= Ada
    age= 30
    label= Ada:30
  1. age ← 18, user ← main.User{Name:"Ada", Age:18}, label ← "Ada:18"

    10func main() {11  var age→ 18 = 1812  user→ main.User{Name:"Ada", Age:18} := User{Name: "Ada", Age: age18}13  label→ "Ada:18" := fmt.Sprintf("%s:%d", user.Name"Ada", user.Age18)1415  fmt.Println("name=", user.Name"Ada")16  fmt.Println("age=", user.Age18)17  fmt.Println("label=", label"Ada:18")18}
    outputname= Ada
    age= 18
    label= Ada:18
  1. age ← 42, user ← main.User{Name:"Ada", Age:42}, label ← "Ada:42"

    10func main() {11  var age→ 42 = 4212  user→ main.User{Name:"Ada", Age:42} := User{Name: "Ada", Age: age42}13  label→ "Ada:42" := fmt.Sprintf("%s:%d", user.Name"Ada", user.Age42)1415  fmt.Println("name=", user.Name"Ada")16  fmt.Println("age=", user.Age42)17  fmt.Println("label=", label"Ada:42")18}
    outputname= Ada
    age= 42
    label= Ada:42

Fill the Fields

  1. User has Name and Age fields.
  2. The example creates User{Name: "Ada", Age: 30}.
  3. user.Name reads Ada.
  4. user.Age reads 30.
  5. The label becomes Ada:30. | Field | Value | | --- | --- | | Name | Ada | | Age | 30 |

Exercise: structs_intro.go

Create a User struct value, read both fields, and print a name-age label