当前位置: 首页 > news >正文

GO 语言学习 之 结构体

        在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,它可以包含多种不同类型的数据组合在一起。结构体为组织和管理相关数据提供了一种有效的方式,常用于表示现实世界中的对象或概念。如果你懂C/C++,那么这个数据结构理解起来挺容易的,只是形式上略有不同。

结构体定义

type <结构体名> struct {

         <成员1> <类型1>

         <成员2> <类型2>

         <成员3> <类型3>

        ...

}

  • type 关键字:表示定义了一个新类型。
  • struct 关键字:表示新的类型是一个结构体类型
  • 结构体可以包含多个成员,每个成员的类型可以相同也可以不同
  • 成员命名也区分大小写,大驼峰命名外部包是否可以被引用
  • 结构体可以有自己的成员函数(这里后续再补充)
  • 成员函数也是要有大小写的命名,大驼峰命名外部包可以引用
  • 作为函数形式参数的时候,通常是传递指针类型,因为结构体的内容可能会很大
  • 另外,指针类型可以直接修改原始数据,把修改的结果带回来,所以使用的时候也要注意
  • 还有一种特殊的用法,匿名结构
  • 指针变量与普通变量在访问结构体成员的时候都使用 . 的方式访问 (与C语言不一样)
  • 结构体支持嵌套使用,最常见的例子就是解析配置 JSON 和 Yaml 内容的时候

结构体的使用

package mainimport "fmt"type Student struct {NumID    int       // 学号Name     string    // 姓名ClassID  string    // 班级Birthday string    // 生日Age      int       // 年龄Sex      string    // 性别IsAccommodation bool // 是否住校 true 住校 false 不住
}func (s *Student)StudentInfoPrint() {fmt.Println("学号 :", s.NumID)fmt.Println("姓名 :", s.Name)fmt.Println("班级 :", s.ClassID)fmt.Println("生日 :", s.Birthday)fmt.Println("年龄 :", s.Age)fmt.Println("性别 :", s.Sex)fmt.Println("是否住校 :", s.IsAccommodation)
}func main() {stu1 := Student {1, "张三", "一年级", "2020-01-12", 6, "男", true}fmt.Println("===== stu1 =====")stu1.StudentInfoPrint()var stu2 Studentfmt.Println("===== stu2 =====")stu2.StudentInfoPrint()stu3 := &Student{}stu3.Name = "李四"fmt.Println("===== stu3 =====")stu3.StudentInfoPrint()stu4 := &Student{NumID: 4,Name: "王五",ClassID: "二年级",Birthday: "2018-03-12",Age: 7,Sex: "男",}fmt.Println("===== stu4 =====")stu4.StudentInfoPrint()stu5 := new(Student)stu5.NumID = 5stu5.Name = "朱六"stu5.Sex = "女"fmt.Println("===== stu5 =====")stu5.StudentInfoPrint()fmt.Println("匿名结果体使用")stu6 := struct {name stringage int}stu6.name = "刘七"stu6.age = 10fmt.Println("===== stu6 =====")fmt.Println("name : ", stu6.name)fmt.Println("age : ", stu6.age)
}

http://www.lryc.cn/news/579893.html

相关文章:

  • 【深度学习新浪潮】如何使用大模型等技术基于序列预测蛋白质的结构,功能和靶点?
  • 韩顺平之第九章综合练习-----------房屋出租管理系统
  • hive中2种常用的join方式
  • 基于 PyTorch 的猫狗图像分类实战
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十) -> 灵活定制编译选项
  • 判断文件是否有硬链接
  • 类图+案例+代码详解:软件设计模式----单例模式
  • 【基础算法】贪心 (二) :推公式
  • PHP:从入门到进阶的全面指南
  • SRE - - PV、UV、VV、IP详解及区别
  • Ubuntu安装ClickHouse
  • 基于探索C++特殊容器类型:容器适配器+底层实现原理
  • 设计模式之代理模式--数据库查询代理和调用日志记录
  • 【C++复习2】内存篇
  • 计算机网络笔记(不全)
  • linux系统安全
  • Rovo Dev CLI Windows 安装与使用指南
  • Word和Excel批量转PDF新方法,操作简单
  • Selenium 安装使用教程
  • Java SE线程的创建
  • 怎么处理[TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark
  • 通道密度与安全性的突破:SiLM5768LCG-DG 六通道互锁隔离器如何重构高可靠系统?
  • Unity HDRP + Azure IoT 的 Python 后端实现与集成方案
  • 使用assembly解决jar包超大,实现依赖包、前端资源外置部署
  • linux 系统已经部署并正常提供服务的docker存储目录迁移
  • 【Prometheus 】通过 Pushgateway 上报指标数据
  • 每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
  • AI+Web3:从Web2到Web3的范式革命与深度技术实践
  • 开源项目XYZ.ESB:数据库到数据库(DB->DB)集成
  • lsblk 显示磁盘(如 /dev/sda)已变大,但分区(如 /dev/sda2)未变,则需要手动调整