在Go语言中,结构体(struct)的初始化可以通过以下几种方式来进行: 键值对初始化(字段名明确指定): 值列表初始化(按顺序初始化): 隐式字段名初始化(如果字段名与变量名相同): 结构体字面量与复合字面量: new() 函数初始化: 匿名结构体初始化: 嵌套结构体初始化:
当结构体字段很多或者你需要只初始化部分字段时,可以采用键值对的方式来初始化结构体。每个字段名后面跟一个冒号和它的值。type Person struct {
Name string
Age int
City string
}
// 键值对初始化
person := Person{
Name: "Alice",
Age: 25,
// City 字段在这里未初始化,其值将是零值(对于字符串则是 "")
}
// 全部字段初始化
person2 := Person{
Name: "Bob",
Age: 30,
City: "New York",
}
如果结构体字段数量不多,并且你希望按顺序初始化所有字段,可以不使用字段名而直接列出值。type Point struct {
X int
Y int
}
// 值列表初始化
point := Point{10, 20}
当外部变量名与结构体字段名相同时,可以在初始化时省略字段名。type User struct {
Username string
Password string
}
username := "user1"
password := "password1"
user := User{username, password}
从Go 1.17开始,还可以使用结构体字面量(Composite Literals)特性,即使结构体字段名与外部变量名不同,也可以通过=:
来指定字段名。user := User{
Username: = username,
Password: = password,
}
使用 new()
函数分配内存并返回指向结构体类型的指针,此时结构体的所有字段都是它们各自的零值。u := new(User) // u 是 *User 类型,所有字段都为零值
可以在声明时直接初始化匿名结构体。anonymous := struct {
Field1 string
Field2 int
}{"Value1", 42}
如果结构体包含嵌套结构体,也可以递归地初始化它们。type Address struct {
Street string
Zip string
}
type Person struct {
Name string
Address Address
}
person := Person{
Name: "Charlie",
Address: Address{
Street: "123 Main St.",
Zip: "12345",
},
}