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自动解引用,可直接访问结构体字段
相关推荐
leikooo5 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
小师兄吃牛肉5 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记6 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
言乐66 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779136 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
Ivanqhz6 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
kakakahahahaha6 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i6 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
沙漠之主7 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
朝朝辞暮i7 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法