版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
20XX/XX/XXGo结构体与方法定义汇报人:XXXCONTENTS目录01
课程导入02
Go结构体的语法要点03
Go结构体的基础用法04
Go方法的语法要点CONTENTS目录05
Go方法的基础用法06
综合实操示例训练07
课程总结与课后作业课程导入01为什么需要结构体与方法
解决单一变量数据整合难题面对用户信息这类多属性数据,结构体可将姓名、年龄等变量整合,避免零散变量导致的逻辑混乱。
实现代码的高复用性与规范性通过为结构体定义方法,如为`Student`结构体写`PrintInfo`方法,同类对象可直接调用,减少重复代码。
契合面向对象编程思想结构体结合方法能模拟类的特性,像Go中用`Car`结构体加`Run`方法,实现封装与行为绑定。掌握Go结构体定义与初始化方法学会定义不同类型的结构体,掌握字面量、new关键字等多种初始化方式,熟练编写示例代码。理解Go方法的绑定与调用逻辑掌握为结构体绑定值方法与指针方法的规则,能区分两种方法的调用场景与执行差异。学会运用结构体与方法实现模块化编程能结合实际场景,用结构体封装数据与方法,实现类似电商订单管理的模块化功能。本次课程学习目标Go结构体的语法要点02结构体的定义语法
基础类型结构体定义以定义用户信息结构体为例,通过type关键字声明,格式为typeUserstruct{Namestring;Ageint}。
匿名结构体定义无需提前声明结构体类型,直接在使用时定义,如varuserstruct{Namestring;Ageint}。
结构体嵌套定义可在结构体中嵌入其他结构体,比如定义Address结构体后,嵌入到User结构体中实现复用。结构体字段的声明规则
字段类型与命名规范字段需指定数据类型,命名遵循驼峰式规则,如定义User结构体时,Name、Age为合规字段名。
字段可见性控制首字母大写的字段为公开字段,可被其他包访问,首字母小写则仅当前包可见,如user结构体的phone字段。
字段默认值设定未显式赋值的字段会自动赋予类型默认值,如int类型字段默认值为0,string类型默认值为空字符串。结构体实例的创建方式直接声明初始化实例直接定义结构体变量并赋值,如varuserUser=User{Name:"Alice",Age:25},简洁直观。使用new函数创建实例通过new(User)创建指向结构体的指针实例,会自动分配内存,返回指针类型变量。使用结构体字面量创建指针实例通过&User{Name:"Bob",Age:30}直接生成结构体指针,可直接用于指针方法调用。结构体名称的可见性判定首字母大写的结构体如`User`可跨包访问,小写结构体仅能在当前包内使用,是Go包级访问控制的核心。结构体字段的可见性设置字段名首字母大写如`User.Name`可被外部包访问,小写字段仅包内可见,常用于封装内部状态。跨包访问可见结构体的限制外部包仅能访问可见结构体的公开字段,无法直接调用其包内私有方法,保障代码封装性。结构体的可见性规则Go结构体的基础用法03结构体字段的访问赋值直接访问结构体字段
通过结构体变量名加点号可直接访问字段,如定义Person结构体后,用p.Name直接获取姓名字段值。结构体字段的赋值操作
支持直接赋值与批量赋值,如p.Age=25可单独赋值,也可用Person{Name:"张三",Age:30}批量初始化。指针类型结构体字段访问
指针结构体需用(*p).Name访问字段,Go语言简化为p.Name,两种写法效果完全一致。结构体作为函数参数
01值传递传参方式将结构体实例直接传入函数,函数会创建副本,如在函数内修改字段,原实例不会受到影响。
02指针传递传参方式传入结构体实例的指针,函数可直接修改原实例字段,常用于需同步修改结果的场景。
03带标签结构体传参示例以包含json标签的User结构体传参,可在函数内结合反射实现参数的序列化操作。结构体嵌套的使用嵌套结构体的声明与初始化可在结构体中嵌入另一个结构体类型,如定义Address结构体后,嵌入到User结构体中完成初始化。嵌套结构体的字段访问可通过外层结构体直接访问内层结构体字段,比如user.Address.City,也可省略内层结构体名简化调用。匿名嵌套结构体的使用无需指定嵌套结构体的字段名,直接将结构体类型嵌入,可直接访问内层的Name、Age等字段。结构体零值与初始化
结构体默认零值特性Go语言中,未显式初始化的结构体字段会自动赋对应类型零值,如int为0、string为空串。
字面量显式初始化方式可通过键值对或顺序值完成初始化,如`user:=User{Name:"Alice",Age:25}`精准赋值字段。
new函数初始化结构体使用new函数会返回结构体指针,字段仍为对应类型零值,如`p:=new(User)`生成指针变量。Go方法的语法要点04绑定接收者的语法格式方法需在func后指定接收者,如func(pPerson)GetName()string,将方法与Person结构体绑定。接收者的类型选择规则值类型接收者会复制结构体实例,指针类型接收者可修改原实例,如func(p*Person)SetAge(ageint)。方法名与参数的语法规范方法名首字母大小写决定可见性,参数列表同普通函数,如func(pPerson)PrintInfo(infostring)。方法的定义语法方法的接收者类型值类型接收者值类型接收者会复制原结构体实例,修改仅作用于副本,如time.Time的方法多采用此类接收者。指针类型接收者指针类型接收者直接操作原结构体实例,可修改实例数据,如sync.Map的方法采用此类接收者。自定义类型接收者基于基础类型自定义的类型也可作为接收者,如typeMyIntint后可为其定义专属方法。方法与函数的区别
定义关联主体不同函数是独立的代码块,不依赖特定类型;方法需绑定结构体等类型,需接收者参数。
调用方式存在差异函数可直接通过函数名调用,方法需通过绑定的结构体实例或类型本身来调用。
参数传递逻辑有别函数参数按值或引用传递,方法接收者分值接收者和指针接收者,传递逻辑更灵活。方法的可见性规则
首字母大写的方法可见范围这类方法可被包外代码调用,如Go标准库中fmt包的Println方法,能被所有项目引用调用。
首字母小写的方法可见范围这类方法仅能在当前包内使用,若自定义包中的calc方法小写,包外代码无法直接调用。Go方法的基础用法05值接收者修改实例副本数据定义值接收者方法时,方法内仅能修改实例副本数据,原实例值不会被改变,如基础类型结构体的赋值操作。值接收者适配值类型调用值类型实例可直接调用值接收者方法,无需额外转换,比如自定义Person结构体实例调用ShowInfo方法。值接收者适配指针类型调用指针类型实例也可调用值接收者方法,Go会自动解引用,例如&Person实例调用GetAge方法。值接收者方法的使用指针接收者方法的使用
修改结构体字段值通过指针接收者方法可直接修改结构体字段,如在User结构体中用UpdateAge方法修改年龄属性。
避免结构体拷贝开销当结构体体积较大时,指针接收者可避免值拷贝,提升性能,常用于大型数据结构体操作。
实现接口的一致性若结构体需实现含指针接收者的接口,所有方法需统一使用指针接收者,如自定义Sort接口实现。嵌套结构体的方法提升
嵌套结构体的方法继承复用通过嵌套匿名结构体,可直接调用其方法,如time.Time作为匿名嵌套时,可复用其Add、Sub等时间处理方法。
嵌套结构体的方法重写覆盖当外层结构体定义同名方法时,会覆盖嵌套结构体的方法,如自定义Time结构体重写String方法以输出特定格式。
嵌套结构体的方法链式调用利用嵌套结构体的方法返回自身特性,可实现链式调用,如自定义Buffer结构体复用bytes.Buffer的Write后链式调用Flush。同名方法的调用规则
值类型与指针类型同名方法调用当类型与指针类型存在同名方法时,值类型实例仅能调用值接收者方法。
结构体嵌套同名方法调用结构体嵌套时,外层实例调用同名方法会优先执行外层自身定义的方法。
接口实现同名方法调用多个实现同一接口的结构体有同名方法时,需通过具体类型实例调用对应方法。综合实操示例训练06声明学生结构体基础字段结合校园场景定义包含姓名、学号、年级、专业字段的结构体,满足学生基础信息存储需求。添加嵌套结构体扩展信息嵌套包含身高、体重、血型字段的健康结构体,丰富学生信息维度,贴合现实校园管理需求。设置字段标签实现数据校验为学号字段添加`validate:"required,len=10"`标签,参考Go生态库实现学号格式自动校验。定义学生信息结构体实现学生信息操作方法
定义学生信息结构体需包含学号、姓名、成绩等字段,如typeStudentstruct{IDint;Namestring;Scorefloat64}来构建基础数据结构。
编写成绩修改方法为Student结构体绑定UpdateScore方法,可通过stu.UpdateScore(92.5)修改指定学生的成绩信息。
实现信息打印方法创建PrintInfo方法,调用stu.PrintInfo()即可格式化输出学生的学号、姓名及各科成绩。完整功能代码演示01用户信息结构体定义与初始化定义包含姓名、年龄字段的User结构体,通过字面量与new函数两种方式完成实例初始化演示。02结构体方法实现用户信息输出为User结构体绑定PrintInfo方法,编写代码实现格式化打印用户姓名、年龄的功能演示。03结构体指针方法修改用户信息为User结构体绑定指针类型的UpdateAge方法,演示通过指针修改结构体实例年龄字段的操作。常见错误场景讲解值类型接收者方法误改结构体字段在定义方法时误用值类型接收者,修改结构体字段后原实例无变化,如修改用户信息却未生效。方法名与结构体字段名重复若方法名和结构体字段同名,会引发编译错误,例如定义名为Name的方法与Name字段冲突。未正确关联方法与结构体定义方法时遗漏接收者声明,导致方法无法绑定到结构体,如定义Print方法未指定接收者。课程总结与课后作业07核心知识点梳理结构体定义语法要点需明确关键字type、结构体名与成员变量,如定义Person结构体包含name、age等字段的规范写法。结构体实例化方式总结涵盖直接声明、字面量赋值、new函数创建三种方式,可结合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国新材料产业与高性能复合材料行业市场现状分析及投资评估研究报告
- 2026中国ARVR显示模组行业技术突破与市场需求分析报告
- 2026欧洲智能交通系统行业市场供需分析及投资评估规划分析研究报告
- 2026人工智能行业市场发展趋势与产业应用现状及投资规划前景分析研究报告
- 2026中国通信服务行业市场分析及创新方向与投资发展规划研究报告
- 2026区块链技术应用于权保护方案设计
- 2026汽车零部件供应企业资质竞争地位市场空间投资渗透规划分析研究报告
- 2026中国D打印行业应用拓展与市场增长预测报告
- 2026中国智能网络通信行业市场深度调研及发展趋势和前景预测研究报告
- 2026Fast芯片组行业库存管理优化与周转效率分析报告
- 电梯安装施工方案
- 数据及其特征课件-2024-2025学年粤教版(2019)高中信息技术必修一
- 经济运行高质量发展统计指标工作手册
- 物联网的控制 课件 2024-2025学年清华大学版(2024)初中信息技术八年级上册
- 外研版(三起)(2024)小学三年级上册英语Unit 2《My school things》教案
- DB4203∕T 239-2024 黄精九蒸九晒加工技术规程
- 《大数据导论》电子教学课件
- DL∕T 1576-2016 6kV~35kV电缆振荡波局部放电测试方法
- 女病人导尿术操作及评分标准
- 《肺部感染的护理课件》
- 风湿免疫疾病的心理应激与心理干预
评论
0/150
提交评论