当前位置: 首页 > 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.dtcms.com/a/266461.html

相关文章:

  • mysql索引:索引应该选择哪种数据结构 B+树 MySQL中的页 页主体 页目录 索引分类
  • C++学习笔记一
  • Mac获取终端历史
  • Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
  • Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
  • Rust+Blender:打造高性能游戏引擎
  • 宽表设计(Wide Table) 与 子表 + 类型 + 属性表设计(EAV 模型或“属性表”模型)
  • golang 中当 JSON 数据缺少结构体(struct)中定义的某些字段,会有异常吗
  • 【Modbus学习笔记】stm32实现Modbus
  • 类图+案例+代码详解:软件设计模式----单例模式
  • AI智能体革命:从ChatGPT到自主决策的技术演进
  • 143.在 Vue 3 中使用 OpenLayers 调节地图的明亮度、对比度、饱和度
  • 焊接机器人结构设计cad【16张】三维图+设计说明书+绛重
  • (超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
  • C++11 forward_list 从基础到精通:原理、实践与性能优化
  • 【C++】list 简介与模拟实现(详解)
  • TM56M152A 十速工业级32位闪存MCU控制器芯片 外设接口+硬件加密引擎
  • 跨平台ZeroMQ:在Rust中使用zmq库的完整指南
  • JDK8升级为JDK21
  • error MSB8041: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。
  • CSS之布局详解指南
  • 深度学习洪水推演:Python融合多源卫星数据可视化南方暴雨灾情
  • bpftrace统计mmap调用时延
  • 应急响应靶场——web3 ——知攻善防实验室
  • 怎么限制某些IP访问服务器?
  • 版本控制器SVN
  • React Native屏幕适配的艺术:px2dp从像素完美到跨平台优雅布局之详细篇
  • Flink TiDB CDC 环境配置与验证
  • RESTful API 安装使用教程
  • 用Python解锁图像处理之力:从基础到智能应用的深度探索