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结构体标签

  1. 附加在结构体字段上的元数据,通常用于告诉外部库(如JSON, 数据库OPM, 验证器等)如何处理该字段.
  2. 使用反引号包裹.
City string `json:"city"`