Go语言-3

一、结构体 struct

结构体用于把多个不同类型变量打包成自定义类型,struct 是值类型,赋值、函数传参都会完整拷贝。

  1. 定义
go 复制代码
type User struct {
	Name string
	Age  int
}
  1. 初始化方式
  • 字段命名初始化
go 复制代码
u1 := User{
	Name: "zhangsan",
	Age:  20,
}
  • 顺序简写初始化,严格按照结构体定义顺序赋值,字段调整顺序就会出错
go 复制代码
u2 := User{"lisi", 22}
  • 零值初始化,字段自动填充对应类型零值
go 复制代码
var u3 User
  1. 结构体嵌入(组合)
go 复制代码
type User struct {
	Name string
	Age  int
}

type Student struct {
	User
	Score float64
}

Student 直接嵌入 User,可直接访问 Name、Age,Go 推荐用组合替代继承。

二、方法 method

方法本质是带接收者的函数,接收者写在 func 和函数名之间,绑定到结构体。接收者分两类:值接收者、指针接收者。

1. 值接收者

go 复制代码
func (u User) ChangeName(newName string) {
	u.Name = newName
}
  • 传递的是结构体拷贝副本
  • 方法内部修改字段,只会修改副本,外部原结构体数据不变
go 复制代码
u := User{Name: "zhangsan", Age: 20}
u.ChangeName("wangwu")
fmt.Println(u.Name) // zhangsan,没有变化

2. 指针接收者

go 复制代码
func (u *User) ChangeName(newName string) {
	u.Name = newName
}
  • 拿到原始结构体内存地址,没有完整拷贝
  • 方法内修改字段,直接改动外部原始结构体
go 复制代码
u := User{Name: "zhangsan", Age: 20}
u.ChangeName("wangwu")
fmt.Println(u.Name) // wangwu,修改生效

三、指针

*T 代表T类型指针,存储变量内存地址;& 用来获取变量地址。

go 复制代码
u := User{"test", 18}
pu := &u // pu保存u的内存地址
fmt.Println(pu.Name) // Go自动解引用,可直接访问结构体字段
相关推荐
denlaku1 小时前
JDK 22 新特性详解
java·开发语言
余槐i1 小时前
开虚拟线程后接口反而更慢:JDK 21 synchronized 锁住载体线程的排查
java·spring boot·redis·mysql·性能优化
紧跟先前的步伐2 小时前
Go AI Agent 实战 14|多轮对话与上下文历史管理
人工智能·ai·golang·1024程序员节
microrain2 小时前
设备报文怎么变,SagooIoT 只约定三个函数名
javascript·物联网·golang·sagooiot
“AI国潮设计-小江”2 小时前
AIGC实战:Python+SDXL批量生成英歌舞IP立牌,解锁猪猪蛋糕“反差萌”流量密码(附完整API源码)
开发语言·人工智能·python·prompt·aigc
Sirens.2 小时前
网络通信基础:IP、端口、协议分层与数据封装
java·网络·网络协议·tcp/ip·java-ee·1024程序员节
H.莓飛2 小时前
【数据结构】排序_OJ题(二):划分与选择
linux·服务器·c语言·开发语言·数据结构·visual studio
CRMEB系统商城2 小时前
服装连锁的导购分销与企微私域
java·大数据·开发语言·人工智能·小程序·php·1024程序员节
紧跟先前的步伐2 小时前
Go AI Agent 实战 15|context.Context、超时与取消机制
人工智能·安全·ai·golang·1024程序员节
若亦_2 小时前
Java泛型入门:类型安全与上界约束
java·1024程序员节