go面向对象

继承 封装 多态

定义结构体

//定义老师的结构体
type Teacher struct {Name   stringAge    intSchool string
}func main() {var t1 Teacherfmt.Println(t1)t1.Name = "tom"t1.Age = 20t1.School = "school"fmt.Println(t1)
}

结构体实例的创建

package mainimport "fmt"//定义老师的结构体
type Teacher struct {Name   stringAge    intSchool string
}func main() {var t1 Teacherfmt.Println(t1)t1.Name = "tom"t1.Age = 20t1.School = "school"fmt.Println(t1)var t2 Teacher = Teacher{"liu", 32, "rrr"}fmt.Println(t2)//指针*var t *Teacher = new(Teacher)//t是指针 t其实指向的就是地址 应该给这个地址的执行的对象的字段赋值(*t).Name = "ma"(*t).Age = 23t.School = "daxue"fmt.Println(t)var t6 *Teacher = &Teacher{"sa", 46, "eda"}fmt.Println(t6)
}

//指针*

结构值之间的转换

方法 行为

package mainimport "fmt"//定义Person结构体
type Person struct {Name string
}func (p Person) test() {fmt.Println(p.Name)
}
func main() {//创建结构体对象var p Personp.Name = "tom"p.test()
}

改变值

package mainimport "fmt"//定义Person结构体
type Person struct {Name string
}func (p Person) test() {fmt.Println(p.Name)
}//*是指针
func (p *Person) test01() {fmt.Println()fmt.Println((*p).Name)
}
func main() {//创建结构体对象var p Personp.Name = "tom"p.test()p.Name = "sasa"fmt.Printf("p的地址为:%p \n", &p)(&p).test()fmt.Println(p)
}

改变值用指针

package mainimport "fmt"type interger intfunc (i interger) print() {fmt.Println("i= ", i)
}func (i *interger) print01() {(*i) = 30fmt.Println("i=", *i)
}
func main() {var i interger = 20i.print()fmt.Println(i)var i01 interger = 5i01.print01()fmt.Println("i01=", i01)
}

其他包被访问用大写

toString

package mainimport "fmt"type Student struct {Name stringAge  int
}func (s Student) toString() string {str := fmt.Sprintf("Name = %v, Age = %v", s.Name, s.Age)return str
}
func (s *Student) toString2() string {str := fmt.Sprintf("Name = %v, Age = %v", s.Name, s.Age)return str
}func main() {stu := Student{Name: "tom",Age:  20,}fmt.Println(stu)fmt.Println(&stu)
}

方法和函数的区别

import "fmt"type Student struct {Name string
}//定义方法必须定义指定的类型
func (s Student) test01() {fmt.Println(s.Name)
}//定义函数
func method01(s Student) {fmt.Println(s.Name)
}
func main() {//调用函数var s Student = Student{"tom"}method01(s)//方法调用s.test01()
}

函数定义的是指针必须传递的是指针,函数定义的是值传递 必须是值类型

package mainimport "fmt"type Student struct {Name string
}//定义函数
func method01(s Student) {fmt.Println(s.Name)
}func method02(s *Student) {fmt.Println((*s).Name)
}
func main() {//函数定义的是指针必须传递的是指针//函数定义的是值传递 必须是值类型var s Student = Student{"tom"}method01(s)method02(&s)
}

对于方法来说,接收者为值类型,可以传入指针类型,接受者为指针类型,可以传入值类型

package mainimport "fmt"type Student struct {Name string
}//定义方法
func (s Student) test01() {fmt.Println(s.Name)
}
func (s *Student) test02() {fmt.Println((*s).Name)
}func main() {var s Student = Student{"yy"}s.test01()//虽然用指针类型调用,但是传递还是安装值传递的形式(&s).test01()(&s).test02()s.test02()
}

创建结构体实例时指定字段值

返回值的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564588.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(五)——树森林

5.4 树和森林 5.4.1 树的存储结构 树的存储1:双亲表示法 用数组顺序存储各结点,每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术,搭建了YOLOv5s深度学习模型,并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下: (1)调研了移动端垃圾分类应用软件动态,并分析其优劣势;…

大数据Spark--入门

文章目录 Spark 概述Spark 是什么Spark and HadoopSpark and HadoopSpark 核心模块 Spark 简单上手创建Maven项目增加 Scala 插件增加依赖关系WordCount异常处理 Spark 概述 Spark 所需资料 链接:https://pan.baidu.com/s/12iaW68vriL6i-xI1kmr0_g?pwdm4zc 提取码…

3.24作业

基于UDP的网络聊天室 项目需求: 如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器端代码 #in…

20.WEB渗透测试--HTTP协议(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:19.WEB渗透测试--抓包技术(下)-CSDN博客 HTTP请求包 HTTP简介 &am…

计算机组成原理-5-输入输出系统

5. 输入输出系统 文章目录 5. 输入输出系统5.1 概述5.1.1 I/O系统的发展概况5.1.2 I/O系统的组成5.1.3 I/O设备与主机的连接5.1.4 I/O设备与主机传送信息的控制方式 5.2 I/O设备5.3 I/O接口5.4 控制方式5.4.1 程序查询方式5.4.2 程序中断方式5.4.3 DMA方式5.4.4 程序中断方式与…

大白话扩散模型(无公式版)

背景 传统的图像生成模型有GAN,VAE等,但是存在模式坍缩,即生成图片缺乏多样性,这是因为模型本身结构导致的。而扩散模型拥有训练稳定,保持图像多样性等特点,逐渐成为现在AIGC领域的主流。 扩散模型 正如…

2024/3/24 LED点阵屏

显示原理: 类似矩阵键盘,逐行or逐列扫描 74HC595是串行 寄存器 感觉就是三转八寄存器 并行:同时输出;串行:一位一位输出 先配置74HC595,重新进行位声明 sbit RCKP3^5; //RCLK sbit SCKP3^6; …

管理类联考–复试–管理类知识–计划

决策是管理的核心,决策是计划的前提,计划是管理的首要职能,战略是一种计划。 #mermaid-svg-rGssnUQtzhGwEUp6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rGssnUQtzhGwEUp6 .e…

Vue3 上手笔记

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

第十三届蓝桥杯JavaB组省赛真题 - 星期计算

解题思路: 方法一: 20的22次方是一个比较大的数,long和int都装不下这么大的数,因此需要使用下面的方法,如果 a, b, p 都是整数,且 p 是正数,那么:(a * b) % p (a % p * b % p) % …

ensp ppp验证实验(二)

实验拓扑&#xff1a; 1、R1和R2使用PPP链路直连&#xff0c;R2和R3把2条PPP链路捆绑为PPP MP直连 2、按照图示配置IP地址 3、R2对R1的PPP进行单向chap验证 4、R2和R3的PPP进行双向chap验证 实验内容&#xff1a; R1配置&#xff1a; #修改名称 <Huawei>sys Enter …