【Go】四、面向对象

news/2025/2/23 0:43:13/

文章目录

  • 面向对象
    • 1、匿名字段
    • 2、接口(❌)
      • 2.1、类型与接口的关系
      • 2.2、空接口
      • 2.3、类型断言

面向对象

1、匿名字段

​ go只提供类型而不写字段名的方式,也就是匿名字段,也称为嵌入字段

1、不写字段名,只给出类型

2、嵌套结构中,包含相同字段名,逐级加入

2、接口(❌)

​ 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节 => 是一种类型,抽象类型,interface是一组method的集合,接口做的事情就像是定义了一个协议,不关心属性(数据),只关心行为(方法)

1、为什么要使用接口?

​ 比如猫会叫(喵喵喵)、狗会叫(汪汪汪),这个时候如果不断的有新的动物加入,由于我们它们实现的方法是很类似的,可以尝试抽象方法,让他们去调用该抽象方法,实现具体的操作。

2、接口的定义

1、接口是一个或多个方法签名的集合
2、任何类型方法集中只要拥有该接口‘对应的全部方法’签名,就表示’实现‘了该接口,无需在类型上显式声明实现了那个接口,称为Structural Typing
3、所谓对应方法,是指有相同名称、参数列表(不包括参数名)以及返回值4、接口只有声明方法、没有实现、没有数据
5、接口可以匿名嵌入其他接口,或嵌入到结构总
6、接口名习惯义er结尾
type 接口类型名 interface {方法1(参数列表1)返回值列表1方法2(参数列表1)返回值列表2方法3(参数列表1)返回值列表3
}// 解释:当方法名和接口名大写的时候,表示这个方法可以被接口所在包之外的代码访问

3、实现接口的条件

​ 一个对象只要全部实现接口中的方法,那么就实现了这个接口,换句话说,接口就是一个需要实现的方法列表。

4、接口实现过程

​ 1)定义接口;2)定义多个结构;3)对应的结构类型充当方法的接受者,实现接口中的方法

5、接口类型变量

​ 我们可以通过接口类型.方法(参数列表),来实现接口中的方法,具有良好的代码可读性。

6、值接收者和指针接收者实现接口的区别

1、值接收者实现接哦欧func (d dog) move() {fmt.Println("狗会动")
}  
func main() {var x Movervar wangcai = dog{} // 旺财是dog类型x = wangcai         // x可以接收dog类型var fugui = &dog{}  // 富贵是*dog类型x = fugui           // x可以接收*dog类型x.move()
} // 解释:不管dog结构体还是结构体指针*dog类型的变量都可以赋值给该接口变量,因为Go语言中有对指针类型变量求值的语法糖,dog指针fugui会自动求值*fugui2、指针接收者实现接口
func (d *dog) move() {fmt.Println("狗会动")
}
func main() {var x Movervar wangcai = dog{} // 旺财是dog类型x = wangcai         // x不可以接收dog类型var fugui = &dog{}  // 富贵是*dog类型x = fugui           // x可以接收*dog类型
}// 解释:Mover接口实现的事*dog类型,所以不能给x传入dog类型的wangcai,此时x只能存储*dog类型的值(fugui)

2.1、类型与接口的关系

1、一个类型实现多个接口(狗可以叫、运动)

2、多个类型实现一个接口(车可以动、人也可以动)

3、接口嵌套(say接口和move接口,嵌套到animal接口中)

2.2、空接口

​ 接口没有定义任何接口,任何类型都实现了空接口,空接口的变量可以存储任意类型的变量。

1、空接口的应用

​ 1)作为函数的参数

​ 2)作为map的值

2.3、类型断言

​ 空接口可以存储任意类型的值,那么我们如何获取其存储的具体数据呢?

​ 接口值:一个接口的值是由一个具体类型和具体类型的值两个部分组成的,这两个部分称为接口的动态类型和动态值


http://www.ppmy.cn/news/48530.html

相关文章

JavaScript如何删除css

我们在前端开发当中,常常需要动态地添加、修改或删除DOM元素和CSS样式。DOM和CSS都是前端开发中不可或缺的部分,而JavaScript作为一种脚本语言,可以对DOM和CSS进行操作。 本文将重点介绍如何使用JavaScript来删除CSS,包括以下几个…

数据结构与算法基础-学习-20-查找之散列表(HASH TABLE)

目录 目录 一、基本思想 二、术语 1、散列方法 2、散列函数 3、散列表 4、冲突 5、同义词 三、如何减少哈希冲突 四、构造散列函数需考虑的情况 五、散列函数的构造方法 1、直接定址法 2、除留余数法 六、如何处理哈希冲突 1、开地址法 2、拉链法 七、散列表查…

搭建CDH错误记录(踩坑无数)

搭建CDH流程记录 如何搭建本地yum源 1.配置yum源这里使用 阿里源 http://mirrors.aliyun.com/repo/Centos-7.repo wget http://mirrors.aliyun.com/repo/Centos-7.repo2.安装http软件 yum install httpd -y3.配置httpd.conf vi /etc/httpd/conf/httpd.conf在 AddType appli…

AOP与SpringBoot使用AOP实例

AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程。 动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过…

进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

目录 1.进制转换必备知识: 1.1 二进制逢2进1 8进制逢8进1 10进制逢10进1 16进制逢16进1 1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换 2.1 二进制转八进制 2.2 八…

ROCKCHIP_AOSP11 ~ 内存优化及系统裁剪

随着Android版本的不断升级更新,Android系统对硬件的要求越来越高,特别是cpu和ddr,在Android11及之后的版本DDR容量就要求至少2GB,DDR容量1GB的设备运行高版本的Android系统就会越来越吃力。针对1GB 容量的DDR的设备,做…

iOS--SDWebImage源码

文章目录 前言它提供了UIImageView的一个分类,支持从网路上下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件。 SDWebImage简介官方图解主序列图(Main Sequence Disagram)顶层API图(Top Level API D…

记一次误用顶层await导致的路由渲染错误

背景:顶层 await Async 异步函数能将 Promise 的链式调用的形式,改为同步的形式,对于编写和阅读代码都非常友好。但一直以来都有一个限制,就是 async 和 await 这两个关键字必须成对出现。这就导致了一个问题,想使用 …