类型断言的最佳实践(1)|学习笔记

简介: 快速学习类型断言的最佳实践(1)

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:类型断言的最佳实践(1)】学习笔记,与课程紧密联系,让用户快速学习知识。

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


类型断言的最佳实践(1)

 

一、类型断言的最佳实践1

在前面的Usb接口案例做改进:

给Phone结构体增加一个特有的方法call(),当Usb接口接收的是Phone变量时,还需要调用call方法。

运行代码。

将多态代码复制,增加代码

func  (p Phone) call(){

fmt.Println(“手机 打电话..”)

}

call这个方法在接口中没有定义,是phone结构体独有的,camera中也没有。把上面代码改为:

func (p Phone)call(){

fmt.Println(“手机在打电话”)

}

//遍历Usbarr数组

实现如下功能:

在前面的Usb接口案例做改进:

给Phone结构体增加一个特有的方法call(),当Usb接口接收的是Phone变量时,需要调用call方法。

//phone还有一个特有的方法call(),请遍历Usb数组,如果是phone变量,除了调用Usb接口声明的方法外,还需要调用phone特有方法 call.=》类型断言

写一个computer结构

type computer struct{

}

Func(computer computer) Working(usb Usb){
usb.start()

usb.stop()

}

目前的写法与之前相同,调用程序,开始遍历数组。

var computer Computer

for index,v:=range usbArr{

computer.Working(v)

}

程序运行结果为

继续执行...

D:\goprojecet\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=1.1继续执行...

D:\goproject\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=2.1继续执行...

D:\goproject\src\go_code\chapter11\assert>cd..

D:\goproject\src\go_code\chapter11\assert>cd assertapply01

D:\goproject\src\go_code\chapter11\assert>assertapply01>go run main.go

手机开始工作。。。

手机停止工作。。。

手机开始工作。。。

手机停止工作。。。

相机开始工作。。。

相机停止工作。。。

D:\goproject\src\go_code\chapter11\assert>assertapply01

上述手机/相机 开始/停止工作是正常的

为了结果美观可以换一行,程序如下:

var computer Computer

for index,v:=range usbArr{

computer.Working(v)

fmt.Println( )

}

运行结果如下:

继续执行...

D:\goprojecet\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=1.1继续执行...

D:\goproject\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=2.1继续执行...

D:\goproject\src\go_code\chapter11\assert>cd..

D:\goproject\src\go_code\chapter11\assert>cd assertapply01

D:\goproject\src\go_code\chapter11\assert>assertapply01>go run main.go

手机开始工作。。。

手机停止工作。。。

手机开始工作。。。

手机停止工作。。。

相机开始工作。。。

相机停止工作。。。

D:\goproject\src\go_code\chapter11\assert>assertapply01

在Func(computer computer) Working(usb Usb){
usb.start()

usb.stop()

}中加一段代码变为

Func(computer computer) Working(usb Usb){
usb.start()

//如果usb是指向phone结构体变量,则还需要调用call方法

usb.stop()

}

usb.call()无法运行,camera中没有call接口,运行结果为usb.call()undifined。

Func(computer computer) Working(usb Usb){
usb.start()

//如果usb是指向phone结构体变量,则还需要调用call方法

//类型断言

usb.stop()

}

把usb转换为phone

If phone,ok:=usb.(phone);ok==true{

Phone.Call()

}

如果usb在进行类型断言成phone成功了就去执行,没有成功就放弃。

如果是手机就进入if调用call,如果不是手机,类型断言就失败,继续执行其他方法。

ok==ture部分可省。

执行程序,结果如下:

继续执行...

D:\goprojecet\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=1.1继续执行...

D:\goproject\src\go_code\chapter11\assert>go run main.go

<1 2>

convert success

y的类型是float32 值是=2.1继续执行...

D:\goproject\src\go_code\chapter11\assert>cd..

D:\goproject\src\go_code\chapter11\assert>cd assertapply01

D:\goproject\src\go_code\chapter11\assert>assertapply01>go run main.go

手机开始工作。。。

手机在打电话。。。

手机停止工作。。。

手机开始工作。。。

手机在打电话。。。

手机停止工作。。。

相机开始工作。。。

相机停止工作。。。

D:\goproject\src\go_code\chapter11\assert>assertapply01

可发现相机仍然可以正常进行,类型断言失败,ok返回到boss,不影响整个程序的进行。

phone只是变量名,可以修改。

相关文章
|
2天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
4天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
537 2
kde
|
4天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
362 3
|
2天前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
754 4
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
|
3天前
|
JavaScript 开发工具 Android开发
如何在原生 App 中调用 Uniapp 的页面?
如何在原生 App 中调用 Uniapp 的页面?
243 138
|
4天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
254 91
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践