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自动解引用,可直接访问结构体字段
相关推荐
总要学点什么37 分钟前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
简 洁 冬冬39 分钟前
泛型方法写法全面辨析:从「能编译」到「能跑」到「能用」
java·泛型
LGL6030A1 小时前
Java学习历程31——初识Spring Boot
java·spring boot·学习
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
Funlang2 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯
总要学点什么2 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
旖旎夜光3 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
Lansonli3 小时前
大数据Spark(八十八):Spark任务资源之Standalone集群测试
java·服务器·spark
ShineWinsu3 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页
budingxiaomoli3 小时前
Spring AOP
java·spring·java-ee