当前位置: 首页 > news >正文

Golang之路---03 面向对象——类型断言

类型断言

作用

  1. 检查 i 是否为 nil
  2. 检查 i 存储的值是否为某个类型

使用方式

第一种:

t := i.(T)

这个表达式可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回值给 t,如果断言失败,就会触发 panic。(即nil或者接口对象类型不为T时均会触发panic)
eg;

func main() {var i interface{} = 10t1 := i.(int)fmt.Println(t1)fmt.Println("=====分隔线=====")t2 := i.(string)fmt.Println(t2)
}

在这里插入图片描述
可以发现在执行第二次断言的时候失败了,并且触发了 panic。

第二种

t, ok:= i.(T)
  和上面一样,这个表达式也是可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回其值给 t,并且此时 ok 的值 为 true,表示断言成功。
  如果接口值的类型,并不是我们所断言的 T,就会断言失败,但和第一种表达式不同的事,这个不会触发 panic,而是将 ok 的值设为 false ,表示断言失败,此时t 为 T 的零值。
eg:

func main() {var i interface{} = 10t1, ok := i.(int)fmt.Printf("%d-%t\n", t1, ok)fmt.Println("=====分隔线1=====")t2, ok := i.(string)fmt.Printf("%s-%t\n", t2, ok)fmt.Println("=====分隔线2=====")var k interface{} // nilt3, ok := k.(interface{})fmt.Println(t3, "-", ok)fmt.Println("=====分隔线3=====")k = 10t4, ok := k.(interface{})fmt.Printf("%d-%t\n", t4, ok)t5, ok := k.(int)fmt.Printf("%d-%t\n", t5, ok)
}

在这里插入图片描述

类型断言(Type Switch)

如果需要区分多种类型,可以使用 type switch 断言,这个将会比一个一个进行类型断言更简单、直接、高效。


func findType(i interface{}) {switch x := i.(type) {case int:fmt.Println(x, "is int")case string:fmt.Println(x, "is string")case nil:fmt.Println(x, "is nil")default:fmt.Println(x, "not type matched")}
}
func main() {findType(10)      // intfindType("hello") // stringvar k interface{} // nilfindType(k)findType(10.23) //float64
}

在这里插入图片描述
注:

  1. 类型断言,仅能对静态类型为空接口(interface{})的对象进行断言,否则会抛出错误。

  2. 类型断言完成后,实际上会返回静态类型为你断言的类型的对象,而要清楚原来的静态类型为空接口类型(interface{}),这是 Goang的隐式转换。

相关文章:

Golang之路---03 面向对象——类型断言

类型断言 作用 检查 i 是否为 nil检查 i 存储的值是否为某个类型 使用方式 第一种: t : i.(T)这个表达式可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成…...

Atcoder 做题记录

My OI Blog A R C 155 F \mathbb{ARC \ 155 \ F} ARC 155 F E, F 先咕着,做一些多项式题,这篇题解是我人工翻译的 [1] Double Counting 双重计数 考虑从叶子节点开始,用唯一的方式(如果有的话)来构造出一棵满足条件的树…...

C++之观察者模式(发布-订阅)

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系, …...

无头单链表,有完整测试程序

&#x1f35f;无头单链表 &#x1f47b;无头单链表的所有结点都存储有效信息 &#x1f47b;无头单链表相对带头单链表&#xff0c;在有些涉及更改头节点的函数上需要传二级指针 &#x1f35f;头文件list.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #includ…...

2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法

## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c;他与Apriori算法一样也是用来挖掘频繁项集的&#xff0c…...

MySQL做分布式锁

分布式锁mysql实现方式 方式1&#xff1a;唯一索引 创建锁表&#xff0c;内部存在字段表示资源名及资源描述&#xff0c;同一资源名使用数据库唯一性限制。多个进程同时往数据库锁表中写入对某个资源的占有记录&#xff0c;当某个进程成功写入时则表示其获取锁成功其他进程由于…...

Python学习笔记:变量类型、字符串基本操作

1.注释 单行注释 # 单行注释 多行注释 """ 多行注释 """2.变量类型 # 基本变量类型 a 1 # integer b 1.5 # float c string # String d "string" # string e False # boolean # list\tuple\dictionar…...

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的jvm模型图 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致m…...

【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题

目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景&#xff1a;在表格里面嵌入el-…...

通过了PMP考试,还有什么证书值得考?

自从7月24号公布了PMP成绩后&#xff0c;不少伙伴私信小编&#xff1a;通过PMP后还有哪些证书可以提升自己&#xff1f;一来是多份高含金量的证书可以多点竞争力&#xff0c;二来是加持自己的职业发展&#xff01;今天小编就来给大家捋一捋&#xff01; 一.NPDP认证 2016 年 4…...

页面技术基础-html

页面技术基础-html 环境准备&#xff1a;在JDBC中项目上完成代码定义 1. 新建一个 Module:filr->右键 -》Module -》Java-》next->名字(html_day1)->finish 2. 在 Moudle上右键-》第二个选项&#xff1a;add framework .. -> 选择JavaEE下第一个选项 Web Apllicat…...

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found

某项目中&#xff0c;我要给别人封装一个深度学习算法的SDK接口&#xff0c;运行在RK3588平台上&#xff0c;然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误&#xff1a; aarch64-buildroot-linux-gnu-gcc --version /data/chw/aarch64/bin/cca…...

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件&#xff0c;修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…...

Django框架之路由用法

简介 路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序&#xff0c;并返回处理结果&#xff0c;也就是 URL 与 Django 的视图建立映射关系。 Django 路由在 urls.py 配置&#xff0c;urls.py 中的每一条配置对应相应的处理方法。 Django 不同版本 urls.py 配…...

回文链表 LeetCode热题100

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 思路 利用快慢指针找到链表中间节点&#xff0c;反转后半段链表。前半段从头节点开始与后半段比较。 注意当链表节点…...

如何在群晖NAS中使用cpolar内网穿透

如何在群晖nas中使用cpolar内网穿透 文章目录 如何在群晖nas中使用cpolar内网穿透 今天&#xff0c;我们来为大家介绍&#xff0c;如何在群晖系统中&#xff0c;使用图形化界面的cpolar。 cpolar经过图形化改造后&#xff0c;使用方法已经简便了很多&#xff0c;基本与其他应用…...

无头单向不循环链表和带头双向循环链表的创建

Lei宝啊&#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 接下来我们将会了解最基础的链表--->单链表 以及最方便也是最爽的链表--->带头双向循环链表。 若有看不懂之处&#xff0c;可画图或者借鉴这里&#xff1a;反转单链表&#xff0c;对于数据结构而言&am…...

超简单的fastapi链接websocket用例

main.py from typing import Listfrom fastapi import FastAPI, WebSocket, WebSocketDisconnectapp FastAPI()class ConnectionManager:def __init__(self):# 存放激活的ws连接对象self.active_connections: List[WebSocket] []async def connect(self, ws: WebSocket):# 等…...

MySQL详解

目录 一、MySQL 概述二、MySQL 安装和配置三、MySQL 基础语法四、MySQL 高级语法五、MySQL 性能优化六、MySQL 应用场景和实例七、MySQL 开发工具和插件八、MySQL 学习资源和社区 一、MySQL 概述 MySQL 是一种开源的关系型数据库管理系统&#xff0c;最初由瑞典的 MySQL AB 公…...

Vue [Day2]

指令修饰符 v-model.trim v-model.number 事件名.stop click.stop 事件名.prevent keyup.enter <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…...

Python FastAPI 高并发性能测试

Python FastAPI 高并发性能测试&#xff1a;解锁现代Web应用的潜力 在当今高并发的互联网应用中&#xff0c;性能是开发者最关注的指标之一。Python FastAPI凭借其异步支持和接近原生性能的表现&#xff0c;成为构建高性能API的热门选择。但如何验证其实际并发能力&#xff1f…...

深入解析安路科技PH1系列FPGA的ERAM架构:从BRAM到高效存储方案

1. PH1系列FPGA的ERAM架构概览 第一次拿到安路科技PH1系列FPGA开发板时&#xff0c;我就被它的ERAM&#xff08;嵌入式随机存取存储器&#xff09;设计惊艳到了。相比传统FPGA的BRAM&#xff08;块随机存取存储器&#xff09;&#xff0c;PH1的ERAM在架构上做了很多创新。每个E…...

WebSocket长连接优化:宠友IM源码中的心跳与断线重连机制

IM系统上线之后&#xff0c;最容易被忽略的一类问题不是发送失败&#xff0c;而是“看起来在线&#xff0c;实际上已经断了”。这种情况用户感知很直接&#xff1a;消息发不出去、收不到、需要反复重启应用。 宠友信息在「宠友IM」源码里&#xff0c;对WebSocket连接这一层做了…...

Java JDBC 封装:从原生写法到工具类封装 + 增删改查

在 Java 操作数据库的过程中&#xff0c;原生 JDBC 代码存在大量重复逻辑&#xff1a;加载驱动、获取连接、释放资源…… 这些代码在每个业务中都要写一遍&#xff0c;不仅繁琐&#xff0c;还容易出错。 本文是个人的一些学习笔记&#xff0c;主要内容如下&#xff1a; 原生 …...

告别纸上谈兵:在Multisim里玩转74系列芯片,做个能计分能倒计时的抢答器仿真

从理论到实践&#xff1a;用Multisim打造智能抢答器系统 在数字电路的学习过程中&#xff0c;许多初学者都会遇到一个共同的困境——虽然能够理解74系列芯片的数据手册和逻辑功能表&#xff0c;但当真正需要将这些芯片组合成一个完整系统时&#xff0c;却不知从何下手。本文将…...

手把手教你如何在企业网络中部署SyncE(含芯片选型指南)

手把手教你如何在企业网络中部署SyncE&#xff08;含芯片选型指南&#xff09; 在数字化转型浪潮中&#xff0c;企业网络对时钟同步精度的要求正从毫秒级向微秒级跃迁。SyncE&#xff08;同步以太网&#xff09;技术凭借其媲美传统SDH的同步性能&#xff0c;正在5G前传、金融交…...

**Deno从零搭建高性能 Web 服务:权限控制 + 日志审计一体化实践**在现代Node.js 生态中,**Deno**

Deno 从零搭建高性能 Web 服务&#xff1a;权限控制 日志审计一体化实践 在现代 Node.js 生态中&#xff0c;Deno 凭借其原生 TypeScript 支持、安全沙箱机制和模块化设计迅速崛起。相比传统 Node.js&#xff0c;Deno 更适合构建轻量级、可维护性强的后端服务&#xff0c;尤其…...

Redis 集群迁移与 Slot 重分配机制

Redis作为高性能的内存数据库&#xff0c;其集群模式通过分片&#xff08;Slot&#xff09;机制实现数据分布式存储。随着业务增长或节点调整&#xff0c;集群迁移与Slot重分配成为运维关键。本文将深入解析这一机制&#xff0c;帮助读者掌握动态扩缩容与故障恢复的核心技术。 …...

JMeter实战指南:从零构建高效接口自动化测试框架

1. 为什么你需要JMeter自动化测试框架 第一次接触JMeter时&#xff0c;我也以为它只是个简单的接口测试工具。直到项目进入快速迭代阶段&#xff0c;我才发现手工维护上百个测试用例有多痛苦——每次需求变更都要逐个修改脚本&#xff0c;测试数据混杂在请求中难以维护&#xf…...

Nintendo Switch第三方控制器终极方案:sys-con深度技术解析与应用指南

Nintendo Switch第三方控制器终极方案&#xff1a;sys-con深度技术解析与应用指南 【免费下载链接】sys-con Nintendo Switch sysmodule that allows support for third-party controllers 项目地址: https://gitcode.com/gh_mirrors/sy/sys-con 在Nintendo Switch游戏生…...