首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// 嵌套结构体(地址信息)
|
||||
type Address struct {
|
||||
City string
|
||||
Street string
|
||||
}
|
||||
|
||||
// 主结构体(用户信息)
|
||||
type User struct {
|
||||
ID int
|
||||
Name string
|
||||
Age int
|
||||
Address // 嵌套结构体(匿名字段,可直接访问其字段)
|
||||
}
|
||||
|
||||
// 带标签的结构体
|
||||
type Person struct {
|
||||
Name string `json:"name"`
|
||||
Age int `json:"age,omitempty"`
|
||||
}
|
||||
|
||||
// 结构体方法
|
||||
func (u *User) GetInfo() string {
|
||||
return fmt.Sprintf("User: %s, Age: %d, City: %s", u.Name, u.Age, u.City)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 初始化带嵌套的结构体
|
||||
u := User{
|
||||
ID: 1,
|
||||
Name: "Alice",
|
||||
Age: 20,
|
||||
Address: Address{
|
||||
City: "Beijing",
|
||||
Street: "Main St",
|
||||
},
|
||||
}
|
||||
|
||||
// 访问字段(嵌套字段可直接访问)
|
||||
fmt.Printf("用户:%+v\n", u)
|
||||
fmt.Println("城市:", u.City) // 等价于u.Address.City
|
||||
fmt.Println("用户信息:", u.GetInfo())
|
||||
|
||||
// 结构体是值类型:赋值时复制所有字段(包括嵌套字段)
|
||||
u2 := u
|
||||
u2.Age = 21
|
||||
u2.Street = "New St"
|
||||
fmt.Println("u年龄:", u.Age, "u2年龄:", u2.Age) // 20 21
|
||||
fmt.Println("u街道:", u.Street, "u2街道:", u2.Street) // Main St New St
|
||||
|
||||
// 结构体比较
|
||||
p1 := Person{Name: "Alice", Age: 25}
|
||||
p2 := Person{Name: "Alice", Age: 25}
|
||||
if p1 == p2 {
|
||||
fmt.Println("p1与p2相等")
|
||||
}
|
||||
|
||||
// 结构体标签:JSON序列化
|
||||
jsonP, _ := json.Marshal(p1)
|
||||
fmt.Printf("Person JSON: %s\n", jsonP) // 输出{"name":"Alice","age":25}
|
||||
|
||||
p3 := Person{Name: "Bob"} // Age为零值0
|
||||
jsonP3, _ := json.Marshal(p3)
|
||||
fmt.Printf("p3 JSON: %s\n", jsonP3) // 输出{"name":"Bob"}(Age为0被omitempty忽略)
|
||||
}
|
||||
Reference in New Issue
Block a user