🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
💡 核心概念详解
📝 实践建议
Go 语言中的结构体(struct)是一种非常灵活的数据结构,它允许你将多个不同类型的数据字段组合在一起,形成一个新的复合类型。下面这个表格能帮你快速抓住结构体的核心概念。
特性分类 | 核心概念/操作 | 说明与示例 |
|---|---|---|
定义与实例化 | 定义结构体类型 | 使用 |
创建实例 | 有多种方式: | |
访问与操作 | 访问/修改字段 | 使用点操作符 |
匿名字段/嵌入 | 字段可以只有类型没有名字,类型即作为字段名。用于实现组合而非继承。 | |
高级特性 | 内存与类型 | 结构体是值类型,赋值和传参默认是值拷贝。其内存通常是连续的。 |
方法 | 可以为结构体定义方法,即带接收器(值接收器或指针接收器)的函数。指针接收器可修改结构体本身。 | |
标签(Tags) | 字段后可附加元信息字符串,通常通过反射(reflection)获取,常用于数据序列化/验证。 |
💡 核心概念详解
结构体是值类型
这一点非常关键。当你在函数间传递结构体、或者进行赋值操作时,默认发生的是值拷贝。这意味着操作的是原始数据的一个副本,不会影响原数据。如果希望函数内部能修改原结构体,或者结构体很大希望避免拷贝开销,应传递结构体的指针(
*StructType)。通过嵌入实现组合
Go语言推崇组合优于继承。通过在一个结构体中嵌入另一个结构体(匿名字段),外部结构体不仅获得了内部结构体的所有字段,还可以直接调用内部结构体的方法,这被称为字段和方法的“提升”(Promotion)。这是一种强大的代码复用方式。
使用指针接收器修改数据
当你定义的方法需要修改结构体实例本身的数据时(例如修改某个字段的值),必须使用指针接收器(
func (p *Person) UpdateName(...))。如果使用值接收器,方法内部操作的只是副本,修改不会生效。
📝 实践建议
JSON序列化:结构体字段标签(如
json:"name")在与JSON等数据格式相互转换时非常常用。encoding/json包会根据这些标签进行字段映射。构造函数模式:可以自定义一个函数来充当“构造函数”,通常以
New...命名,返回一个初始化后的结构体实例(通常是指针),这有助于集中处理验证逻辑。例如:func NewPerson(name string, age int) *Person { if age < 0 { return nil }; return &Person{Name: name, Age: age} }。可见性规则:结构体名和字段名的大小写决定了其可见性。以大写字母开头表示可被其他包访问(公开),小写则表示仅在当前包内可访问(私有)。
希望这些信息能帮助你更好地理解和使用Go语言的结构体。如果你对某个特定用法有更深入的疑问,我很乐意继续探讨。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙