结构体初始化
本课属于 Coddy GO 学习旅程的“面向对象编程”单元。第 9 课,共 107 课。
Go 提供了几种初始化结构体的方式,每种方式都适用于不同的情况。
命名字段初始化
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}按位置初始化(顺序必须与字段声明一致)
p2 := Person{"Bob", 30, "London"}零值初始化(所有字段都获得默认值)
p3 := Person{}
// Name: "", Age: 0, City: ""
部分初始化(未设置的字段会获得零值)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
使用 & 指向结构体
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // Diana使用 var,然后为字段赋值
var p6 Person
p6.Name = "Eve"
p6.Age = 22命名字段初始化是最常见、最易读的方式。需要指向结构体的指针时,使用 &。
挑战
中等使用不同的初始化方法创建三个 Player 对象:
- player1:使用输入值初始化命名字段
- player2:使用命名字段初始化,Name: "Guest", Class: "Novice", HitPoints: 50
- player3:使用
var声明,然后逐个赋值给每个字段
亲手试试
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: 使用输入值,通过指定字段名初始化来创建 player1
// TODO: 通过指定字段名初始化来创建 player2:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: 使用 var 声明 player3,然后为字段赋值:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Go 在线编译器