go语言基础 -- 类型断言及其应用

类型断言的定义

我们直接通过一个案例来描述类型断言比较直观

package main
import("fmt"
)
type Point struct {X intY int
}
func main() {var point Point = Point{1, 2}var a interface{}a = pointvar b Point//b = a // 这种写法是有问题的,不能直接将一个接口类型赋值给一个自定义类型// 这句话的意思是,判断a是否指向Point类型,若指向,则转成Point类型,这就是类型断言b = a.(Point)
}

类型断言同样可以用于基础数据类型,如果断言的数据类型不匹配,会报panic,如果我们想在断言时带检查而不报panic,需要这样写即可:

b, is_ok = a.(Point)
if is_ok {
} else {
}

类型断言的应用场景

  1. 类似前面文章提到过的结构体切片,存储不同的结构体变量,如果我们想根据不同的变量调用类型特有的方法,这时就需要用到类型断言。
type Usb interface{Start()Stop()
}
type Phone struct{}
type Camera struct()
func (p Phone) Start(){
}
func (p Phone) Stop() {
}
// Call()为Phone独有
func (p Phone) Call() {
}
func (p Camera) Start(){
}
func (p Camera) Stop() {
}
type Computer struct{
}
func (c computer) Write(usb Usb) {usb.Start()// 判断usb为Phone时,调用Call()if phone, ok := usb.(Phone); ok {phone.Call()}usb.Stop()
}
func ()
  1. 用于判断参数类型,典型案例如写一个函数,可以接收任意个数的参数,判断对应的参数类型
func TypeJudge(items... {}interface) {for index, x := range items {switch(x.(type) {case bool:// ...case int, int64:// ...case string:// ...case Student:// ...case *Student:// ...default://...}}
}

有意思的是,自定义类型Student可以在上面函数之后再定义,但一般不推荐这样做

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

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

相关文章

【C语言】linux内核packet_setsockopt

一、中文注释 // 发送数据包函数。它尝试通过特定的网络设备队列直接传输一个skb(socket缓冲区)。 static int packet_direct_xmit(struct sk_buff *skb) {return dev_direct_xmit(skb, packet_pick_tx_queue(skb)); // 调用dev_direct_xmit函数&#x…

redis7.2.2|SkipList源码解析,源码面前了无秘密

本篇文章基于redis7.22 源码位置:redis-7.2.2\src\t_zset.c 有关skiplist的介绍可以参考:skiplist 文章目录 ZsetzsetData_Structzskiplist FunctionzslCreateNodezslCreatezslFreeNodezslFreezslRandomLevelzslInsertzslDeleteNodezslDeletezslGetRankz…

2024年3月5日 晨会汇报

Good morning, colleagues! Today, I’d like to share an update about my recent work activities which encompasses of two areas: an overview of my work activities from yesterday and an agenda for today. Yesterday’s primary task was to fixing bugs in the ga…

Netty源码剖析——启动过程源码剖析(二十六)

指南 在 io.netty.example 包下,有很多Netty源码案例,比较适合分析 Netty启动过程源码剖析 源码需要剖析到Netty调用doBind(),追踪到NioServerSocketChannel的doBind()。并且要Debug程序到NioEventLoop类的run(),无限循环&#xf…

前端:a标签的跳转方式

一、内部页面跳转&#xff1a;使用相对路径或者绝对路径指定目标页面的URL&#xff0c;例如&#xff1a; <a href"page.html">跳转到page页面</a> 二、外部页面跳转&#xff1a;使用完整的URL指定目标页面的地址&#xff0c;例如&#xff1a; <a h…

【Java】嚼烂基础之抽象类

文章目录 前言一、抽象类1.1抽象类概念1.2抽象类语法1.3抽象类特性1.4抽象类的作用 结语 前言 在之前我们对Java的继承与多态特性进行了一定的了解&#xff0c;今天我们来继续深入学习内容——抽象类。本篇文章将详细介绍Java语言中的抽象类abstract的概念、语法、特性与作用&…

重庆有哪些媒体资源?活动展会媒体邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 重庆作为中国的一个直辖市&#xff0c;拥有丰富的媒体资源&#xff0c;涵盖电视台、广播电台、报纸、杂志以及网络媒体等各个领域。这些媒体不仅是传播新闻和信息的重要渠道&#xff0c;…

【C语言】【洛谷】P1125笨小猴

一、个人解答 #include<stdio.h> #include<string.h>int prime(int num);int main() {char max a, min z;int maxn0, minn1000;char str[100];int num[26] { 0 };fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] \0;for (int i 0; str[i]…

ChatGPT4.0之使用c++20的concept实现编译期快排

在现代软件开发中&#xff0c;C一直是一门极其强大而复杂的编程语言&#xff0c;它提供了广泛的功能和高度的灵活性。随着C20的到来&#xff0c;我们迎来了一个重要的新特性&#xff1a;Concepts。Concepts旨在改进C的模板系统&#xff0c;通过为模板参数设定约束&#xff0c;使…

电子医疗云的前端登录页面

项目使用vue框架和element-ui快速搭建登录页面 这里提供login.vue的代码&#xff1a; <template><div class"login-container"><div class"login-box"><el-form ref"loginForm" :model"form" :rules"rule…

当父母被健康谣言包围,除了吐槽我们还能做什么?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 父母健康舒心是我们的福报&#xff0c;希望本期节目能让大家重视潜移默化的力量。小时候父母是我们心中无所不能的超级英雄。长大后的我…

《数字图像处理(MATLAB版)》相关算法代码及其分析(3)

目录 1 对边界进行子采样 1.1 输入参数检查 1.2 处理重复坐标 1.3 计算边界最大范围 1.4 确定网格线数量 1.5 构建网格位置向量 1.6 计算曼哈顿距离 1.7 整理输出结果 1.8 返回结果 2 改变图像的存储类别 2.1 函数输入 2.2 数据类型转换 2.3 错误处理 2.4 返回结…

光传感器OPT3001

OPT3001是一款可如人眼般测量光强的单芯片照度计&#xff0c;测量范围0.01 lux-83k lux,使用IIC进行数据通信。它的引脚如下&#xff1a; 它的应用框图如下&#xff1a; 其中SCL,SDA为IIC通信脚&#xff0c;需接上拉电阻 ADDR的接线影响IIC通信地址 INT为中断输出&#xff0c;可…

MAB建模规范介绍

前言 MAB建模规范&#xff08;Model-Based Design Across MathWorks Products&#xff09;是MathWorks公司制定的用于提高MATLAB和Simulink模型可读性、可维护性和可重用性的建模规范。该规范涵盖了模型结构、命名约定、注释、代码生成等方面的内容。 ① 主要目标 MAB建模规…

Linux命令行精粹:提升开发效率的必备指南

**Linux命令行精粹&#xff1a;提升开发效率的必备指南** Linux操作系统以其强大的命令行工具而闻名&#xff0c;为开发者提供了丰富的功能&#xff0c;从文件管理到系统监控&#xff0c;再到网络配置&#xff0c;Linux命令行工具无所不能。本文将为你介绍Linux中不可或缺的常…

深度学习算法优化流程

深度学习算法的一般优化流程&#xff0c;具体的实施方法和步骤可能会根据具体任务和数据的特点而有所不同&#xff0c;优化流程通常包括以下几个主要步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

.md转pdf

1、使用vscode安装Markdown PDF Markdown PDF 打开预览转pdf,同目录下自动生成pdf文件

【Educoder数据挖掘实训】冗余值的处理

【Educoder数据挖掘实训】冗余值的处理 开挖 这个题就比较容易了&#xff0c;实训里的要求写的也比较清楚。 主要是讲解了 d r o p _ d u p l i c a t e s drop\_duplicates drop_duplicates函数&#xff0c;该函数补全如下&#xff1a; DataFrame.drop_duplicates(subsetNone…

3DEXPERIENCE Works八大核心优势分析

云技术正在加速普及&#xff0c;助力各行各业数字化转型。根据IDC 2023年12月发布的报告&#xff0c;2023年全球云计算市场规模达到3329亿美元&#xff0c;同比增长19.4%。其中&#xff0c;公有云市场规模达到2587亿美元&#xff0c;同比增长21.5%;私有云市场规模达到742亿美元…

Spring Test 常见错误

前面我们介绍了许多 Spring 常用知识点上的常见应用错误。当然或许这些所谓的常用&#xff0c;你仍然没有使用&#xff0c;例如对于 Spring Data 的使用&#xff0c;&#xff0c;有的项目确实用不到。那么这一讲&#xff0c;我们聊聊 Spring Test&#xff0c;相信你肯定绕不开对…