GO结构体的定义和使用

1. 结构体定义

结构体是Go语言中自定义的复合数据类型,用于封装多个不同类型的字段。定义语法:

go

type 结构体名 struct {

字段1 类型1

字段2 类型2

// ...

}

示例:定义用户结构体

go

type User struct {

ID int

Name string

Email string

IsActive bool

}

2. 结构体初始化

可通过多种方式初始化结构体:

方式1:声明时赋值

go

user1 := User{

ID: 1,

Name: 张三: angsan@example.comn IsActive: true,

}

方式2:字段顺序赋值(需全部字段)

go

user2 := User{2, lisi@example.com false}

方式3:先声明后赋值

go

var user3 User

user3.ID = 3

user3.Name =

3. 访问和修改字段

使用点号`.`操作符:

go

fmt.Println(user1.Name) // 输出:张三

user1.Email = _email@example.com // 修改字段

4. 嵌套结构体

结构体可包含其他结构体:

go

type Address struct {

City string

ZipCode string

}

type Company struct {

Name string

Address Address // 嵌套结构体

}

company := Company{

Name: 公司: Address{

City: n ZipCode:

}

fmt.Println(company.Address.City) // 输出:北京

5. 匿名结构体

无需预先定义类型:

go

temp := struct {

Key string

Value int

}{

Key: : 95,

}

fmt.Println(temp.Key) // 输出:score

6. 结构体方法

可为结构体定义方法(接收者类型):

go

func (u User) GetInfo() string {

return fmt.Sprintf(ID:%d, 姓名:%s.ID, u.Name)

}

// 调用方法

info := user1.GetInfo()

fmt.Println(info) // 输出:ID:1, 姓名:张三

7. 指针接收者

需修改结构体时使用指针:

go

func (u *User) Deactivate() {

u.IsActive = false

}

user1.Deactivate()

fmt.Println(user1.IsActive) // 输出:false

8. 结构体标签

用于元数据(如JSON序列化):

go

type Product struct {

ID int `json:_idn Name string `json:

amen Price float64 `json:

典型应用场景

- 数据库模型封装

- API请求/响应数据格式

- 复杂配置参数管理

- 面向对象编程中的数据载体

> 关键特性:

>值类型(赋值时复制整个结构)

>支持==比较(需所有字段可比较)

>内存布局连续(优化访问效率)

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐