news 2026/6/10 16:31:16

HoRain云--Go语言结构体完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Go语言结构体完全指南

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

Go语言结构体详解

一、结构体的定义

二、结构体的用途

三、实例化结构体

四、访问结构体字段

五、嵌套结构体

六、结构体方法

七、匿名结构体

八、可见性规则

九、注意事项


Go语言结构体详解

结构体(struct)是Go语言中一种重要的自定义数据类型,用于将多个不同类型的数据组合在一起,形成一个复合数据类型。

一、结构体的定义

使用typestruct关键字定义结构体:

type Person struct { Name string Age int City string }

相同类型的字段可以写在一起:

type Person struct { Name, City string Age int }

二、结构体的用途

  1. 表示复杂的数据结构:将多种类型的数据组合在一起
  2. 组织和管理数据:表示现实世界中的实体或概念
  3. 定义和实现方法:使数据和操作紧密结合
  4. 实现接口:通过实现接口方法来增强代码灵活性
  5. 创建和初始化对象:方便地实例化复杂数据结构

三、实例化结构体

有多种方式可以实例化结构体:

  1. 使用字段名初始化

    p1 := Person{Name: "Alice", Age: 30, City: "Beijing"}
  2. 使用字段顺序初始化

    p2 := Person{"Bob", 25, "Shanghai"}
  3. 使用new关键字

    p3 := new(Person) p3.Name = "Charlie" p3.Age = 35
  4. 零值初始化

    var p4 Person p4.Name = "Dave" p4.Age = 40

四、访问结构体字段

使用点(.)运算符访问和修改结构体的字段:

p := Person{Name: "Eve", Age: 28, City: "Guangzhou"} fmt.Println(p.Name) // 输出: Eve fmt.Println(p.Age) // 输出: 28 p.Age = 29 fmt.Println(p.Age) // 输出: 29

五、嵌套结构体

Go语言允许在一个结构体中嵌套另一个结构体:

type Address struct { Street string City string Country string } type Contact struct { Name string Email string Phone string Address Address } contact := Contact{ Name: "John", Email: "john@example.com", Address: Address{ City: "New York", Country: "USA", }, } fmt.Println(contact.Address.City) // 输出: New York

六、结构体方法

可以为结构体定义方法,通过接收者(receiver)关联方法与类型:

type Circle struct { Radius float64 } // 值接收者 func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius } // 指针接收者(可以修改结构体字段) func (c *Circle) SetRadius(r float64) { c.Radius = r }

七、匿名结构体

在定义临时数据结构时可以使用匿名结构体:

car := struct { name string year int }{ name: "Tesla", year: 2023, } fmt.Println(car.name) // 输出: Tesla

八、可见性规则

type Person struct { Name string // 公开字段 age int // 私有字段 }

九、注意事项

  1. 内存布局:结构体的字段在内存中按照定义的顺序依次排列
  2. 嵌套结构体的可见性:嵌套结构体的字段在外部结构体外部是不可见的
  3. 方法接收者选择:根据是否需要修改接收者的字段来选择值类型还是指针类型的接收者

结构体是Go语言中强大而灵活的数据类型,通过合理使用结构体,可以编写出更加模块化、可维护和易于扩展的代码。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:55:29

计算机毕业设计|基于ssm + vue超市管理系统(源码+数据库+文档)

超市管理 目录 基于ssm vue超市管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于ssm vue超市管理系统 一、前言 博主介绍:✌️大厂码农|毕设布道…

作者头像 李华
网站建设 2026/6/10 13:59:35

别急着删索引!MySQL的隐藏索引让你安全试错

本文首发于「数据库干货铺」公众号,转载请联系授权。在日常的数据库运维中,相信不少DBA都遇到过这样的困境:某个索引到底有没有用?删除会不会影响系统性能?留着又怕影响写入速度。MySQL8.0带来的隐藏索引功能&#xff…

作者头像 李华
网站建设 2026/5/22 20:38:34

基于springboot 网上超市系统(源码+数据库+文档)

网上超市 目录 基于springboot vue网上超市系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue网上超市系统 一、前言 博主介绍:✌️大…

作者头像 李华
网站建设 2026/6/10 15:48:46

基于springboot 酒店预订系统(源码+数据库+文档)

酒店预订 目录 基于springboot vue酒店预订系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue酒店预订系统 一、前言 博主介绍:✌️大…

作者头像 李华
网站建设 2026/6/10 15:54:37

学术新伙伴:百考通AI如何重塑你的文献综述写作体验

在硕士研究的征程中,文献综述往往被视为第一道真正的学术试炼。它要求研究者不仅要有广博的阅读积累,更需要具备清晰的逻辑梳理能力和深刻的学术洞察力。然而现实情况是,许多同学尽管投入了大量时间阅读文献,却依然在组织与写作环…

作者头像 李华