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自动解引用,可直接访问结构体字段
相关推荐
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之元注解简化权限表达式
java·数据库·spring
张小凡vip3 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
xifangge20254 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板
java·vue.js·python
Wang's Blog4 小时前
Java框架快速入门: Spring Security+OAuth2之云服务集成与多因子认证设计
java·开发语言·spring
门思科技4 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
大草原的小灰灰4 小时前
Python基础语法
开发语言·python
liangsheng_g5 小时前
SpringAOP拦截器链递归与事务钩子补偿源码实战
java·spring
SL_staff5 小时前
制造业私有化文档平台的技术实践:从知识孤岛到可追溯知识资产
java·spring·开源
泡泡鱼(敲代码中)6 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql