文章图片
文章图片
文章图片
文章图片
文章图片
Go 语言是静态语言 , 在编写代码时 , 就对类型有严格的要求 , 一旦类型不匹配 , 就有可能编译失败 。
因此在写代码时 , 就要经常用到类型的转换 , 这些知识点 , 对于一个新手来说 , 可以说是一个不小的门槛 , 经常要通常搜索引擎来寻找答案 。
今天我总结了四种日常开发中最经常遇到的类型转换方法 , 吃透后就可以自由的进行类型转换 。
# 第一种:显式类型转换
使用对应的类型函数进行转换 , 以一个简单的例子来帮助理解 , 使用 int16 就可以将 int8 类型的对象转为 int16
再举个例子 , 先将 string 类型通过 [
byte 类型函数转为 [
byte (等同于 [
uint8) , 最后又使用 string 类型函数将 [
byte 转回 string
这种方法 , 同样适用于自己定义的结构体和接口类型 , 但要注意的是 , 仅能用于将结构体类型转换接口类型 , 而不能将接口类型转为结构体类型 。
这边也举个例子
# 第二种:隐式类型转换
隐式转换 , 是编译器所为 , 在日常开发中 , 开发者并不会感觉到发生了变化 。
隐式转换以下面两种情况最为常见 , 非常简单 , 我直接以截图加标注说明就行了 , 不再长篇大论 。
函数调用时转换
函数返回时转换
# 第三种:类型断言
学了上面第二种方法后 , 我们已经知道下面这段代码 , 肯定是会编译失败的 。
答案当然是不能了 , 原因很简单 , 因为经过 demo1 函数后 , s1 会被隐式转换成 interface{ 类型 , 而 demo2 函数的参数类型要求为 Student , 因此类型不匹配 。
解决方法也相当的简单 , 只要使用类型断言一下 , 就能实现静态类型的转换 。
为了避免有新手 , 还不了解类型断言(Type Assertion) , 我这边再简单介绍一下 。
类型断言可用于判断一个对象是否是某类型 。
这其中包含两种情况:
第一种情况:该对象是 T 类型(struct 类型) , 则断言该对象是 T 类型 , 就能断言成功 。
第二种情况:该对象是 I 类型(接口类型) , 则断言对象是 T 类型 , 也能断言成功 , 并且返回一个静态类型为 T 的对象 , 也相当于类型转换了 。
倘若类型断言失败 , 则会抛出 panic , 使用的时候 , 请千万注意处理 。 若不想让其抛出 panic , 可以使用另一种断言语法 。 断言不是今天的主题 , 这里不再展开 , 更多具体内容 , 请查看我以前的这篇文章 (27. 说说 Go 语言中的类型断言?) , 写的非常清楚 。
另外 , 有一点需要提醒的是 , 类型断言并不能用于两个通用类型的相互转换 , 只能用于将静态类型为 interface{ 类型的对象 , 转为具体的类型 。
- 月收入0支出300万,上海创业者总结了十条生存指南
- 爱彼迎暂停中国境内房源预订业务 全面押注出境游业务回归
- 5G|华为Mate 50将于7月发布:5G全面回归,首发鸿蒙3.0
- 存储&计算芯片2021年报总结,存储国产化更强,芯片获五年最高增速 | 智东西内参
- |苏宁易购发布“家场景”服务升级计划,全面开启618
- vivo x80|不吹不黑VIVO X80全面测评,究竟值不值得买?
- 安卓|苹果即将推出智能路由器新品,苹果音乐全面迎来涨价
- 华为|华为MateBook系列性能创新再升级 助力办公笔记本电脑全面提升生产力
- 小米科技|小米MIUI13稳定版迎来13.0.6升级,更新包1.3GB,全面提升安全性
- 删除|9位卷王!总结1135页Java核心面试手册,硬钢BATJ一线大厂面试官