Go基本类型
go 基本类型
go 数组
go 切片
go 结构体
go结构体示例
package main
import (
"encoding/json"
"fmt"
)
type Address struct {
City string `json:"City"`
Country string `json:"country"`
}
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Address Address `json:"address"`
}
// NewUser: 构造函数, 返回一个 User 指针.
// 合并参数: city 与 country 都是 string.
func NewUser(name string, age int, city, country string) *User {
return &User{
Name: name,
Age: age,
Address: Address{
City: city,
Country: country,
},
}
}
// 值接收者方法(不会修改原对象)
func (u User) SayHi() {
u.Age++
fmt.Printf("Hi, i'm %s, %d years old.\n", u.Name, u.Age)
}
// 指针接收者方法(会修改原对象)
func (u *User) GrowUp() {
u.Age++
fmt.Printf("Hi, i'm %s, %d years old.\n", u.Name, u.Age)
}
// 展示地址
func (u User) ShowAddress() {
fmt.Printf("I live in %s, %s.\n", u.Address.City, u.Address.Country)
}
func main() {
// 使用构造函数创建用户
user := NewUser("Alice", 20, "Tokyo", "Japan")
user.SayHi()
user.ShowAddress()
user.GrowUp()
user.SayHi()
// 序列化为json
jsonData, _ := json.MarshalIndent(user, "", "")
fmt.Println("\nJson OutPut:")
fmt.Println(string(jsonData))
// 反序列化回结构体
var user2 User
json.Unmarshal(jsonData, &user2)
fmt.Println("\nDeserialized User:")
user2.SayHi()
}
/**
Output:
Hi, i'm Alice, 21 years old.
I live in Tokyo, Japan.
Hi, i'm Alice, 21 years old.
Hi, i'm Alice, 22 years old.
Json OutPut:
{
"name": "Alice",
"age": 21,
"address": {
"City": "Tokyo",
"country": "Japan"
}
}
Deserialized User:
Hi, i'm Alice, 22 years old.
*/
go结构体标签
- 附加在结构体字段上的元数据,通常用于告诉外部库(如JSON, 数据库OPM, 验证器等)如何处理该字段.
- 使用反引号包裹.
City string `json:"city"`