Collections and Composite Types
Structs
Structs group named fields into one value.
struct field
A struct field stores one named part of a larger value.
Structs
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)
}
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
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
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
UserhasNameandAgefields.- The example creates
User{Name: "Ada", Age: 30}. user.NamereadsAda.user.Agereads30.- 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