Go 接口课堂练习题 | 学习笔记

简介: 快速学习 Go 接口课堂练习题

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程Go 接口课堂练习题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9702


Go接口课堂练习题

 

内容介绍:

一、第一个案例

二、第二个案例

三、第三个案例

 

一、第一个案例

下面代码,有没有错误,能得出什么结论?

//对应了 A 接口,

有两个方法:

Test010和Test020

type Alntertace intertace

Test010

Test020

//对应了 B 接口,

有两个方法:

Test010和 Test030

type Binterface interface

Test010

Test030

type Stu struct

func (stu Stu)  Test010

func (stu Stu)  Test020

func (stu Stu)  Test030

func main

stu-Stu//变量对应类型,实现了 a 和 b 的方法,方法要完全一样。

var a Alnterface=stu

var b Bintertace=stu

fmt. Printin ("ok-",a,b)

注意:

这是把 stu 提供给 A/B 接口,方法要完全一样才行,参数类型和参数值都要一样,既实现了 b 里面的 test01又实现了了 a 里面的 test01。

结论:

在实现接口的时候,标准只看函数而不是看哪个接口,接口是基于方法的。


二、第二个案例

下面代码,有没有错误,你能得出什么结论?

//对应了A接口,有两个方法:

Test010和 Test020

type Alnterface interface{

Test01 ()

Test02 ()

//对应了 A 接口,有两个方法:

Test010和 Test020

type Binterface interface

Test01

Test03

//把 a 和 b 两个接口,都放到了 c 接口,继承了。

此时问题比较严重了。

相当于在 c 接口里有两个完全相同的 test01,会报错。

无论有多少接口,都不能重合,这里便产生编译错误的后果,因为 Cinterface 中有两个相同的 test01,不能有两个完全一样的接口名,否则编译器会报错。

type Cinterface interface{

Alnterface

Binterface

funcmain ()

//所以这里编译错误,因为 Cnterface 有两个 Test01(),编译器不能通过!


三、第三个案例

//下面代码,有没有错误,为什么?

type Usb interface

Say()

type Stu struct {}

//以上还没有错误

func (this *Stu) Say()

fmt.Println("Say()")

func main() {

var stu Stu = Stu//错误!会报 Stu 类型没有实现 Usb 接口

var u Usb = stu

u.Say()

fmt.PrintIn("here", u)

//此段代码是错误的,一定会报错:

Stu 这个类型没有实现USB接口。

改正:

加个地址就成功。其他没有变化,指针直接调没有问题,运行后是正确的。

改正结果:

//错误!会报 Stu 类型没有实现Usb接口

//如果希望通过编译,var u Usb=stu

var stu Stu = Stu//错误!会报 Stu 类型没有实现 Usb 接口

var u Usb = stu

相关文章
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
2月前
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
7月前
|
Go 数据安全/隐私保护
go 基于gin编写encode、decode、base64加密接口
go 基于gin编写encode、decode、base64加密接口
80 2
|
4月前
|
存储 Go
Go to Learn Go之接口
Go to Learn Go之接口
40 7
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
8月前
|
程序员 Go
|
4月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
5月前
|
存储 缓存 NoSQL
在 Go 中使用接口进行灵活缓存
在 Go 中使用接口进行灵活缓存
|
4月前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
39 0
|
5月前
|
XML 存储 JSON
在Go中使用接口:实用性与脆弱性的平衡
在Go中使用接口:实用性与脆弱性的平衡

相关实验场景

更多