Go语言的几种类型转换

前言

在日常编程中,类型转换是经常需要用到的。因此本文将总结归纳一下Go语言中常见的一些类型转换。
Go语言中的类型转换可以有多种分类方式:
比如按照是否需要声明,可以分为:隐式类型转换和显式类型转换。
可以再根据使用场景划分为3种:显式类型转换、隐式类型转换和断言。(很多地方这里分出来4种,多了一个强制类型转换,但我认为显式类型转换和强制类型转换应该就是一回事。期待大佬解答一下这里他们的分类依据)
再或按照转换方向,比如从整数类型到浮点数类型的转换,或者从浮点数类型到整数类型的转换… …
本文将学习归纳使用场景分类下的情况。

强制类型转换

就是直接强转,可能会导致数据丢失或溢出。

newType := targetType(expression)

其中,newType是要转换的目标类型,targetType是要转换为的类型,expression是要转换的表达式或变量。

例如:

x := 10
y := float64(x)

float64(x)将整数x转换为浮点数类型,并将结果赋值给变量y。

隐式类型转换

隐式类型转换主要出现在接口处,eg:

package mainimport "fmt"type Animal interface {Sound()
}type Dog struct {Breed string
}func (d Dog) Sound() {fmt.Println("Woof!")
}func demo2(a Animal) {a.Sound()
}func demo1(d1 interface{}) {// 隐式类型转换——结构体类型转为接口类型demo2(d1.(Animal))
}func main() {d1 := Dog{Breed: "滴滴滴"}demo1(d1)
}

可以看到,这其中

日常使用中也可能碰见,比如:


func main() {var x int = 10var y float64 = x // 隐式类型转换,将整数类型转换为浮点数类型fmt.Println(y)     // 输出:10.0
}

断言

简单来说相当于执行了一个判断逻辑,如果是A类型则正确,反之则强转为A类型,若转换成功则返回,不成功则报错。

通常使用以下语法进行断言:

value, ok := BInterface.(A)

其中,someInterface 是一个接口类型的值,A 是一个具体的类型。value 是转换后的值,ok 是一个布尔值,表示转换是否成功。如果转换成功,value 将包含转换后的值,ok 为 true;如果转换失败,value 将包含零值,ok 为 false。

具体讲解见此文。

总结

个人认为日常使用中用的最多的是强制类型转换,亦可通过函数诸如Atoi , Itoa等。
隐式类型转换主要发生在使用接口时,尤其需要注意看得懂。
断言使用在一些附带有判断的场景。诸如一个kafka消息接收时候断言为[]byte类型。

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

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

相关文章

navicat密码解密

https://github.com/HyperSine/how-does-navicat-encrypt-password 获取加密的密码 reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v host reg query HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers /s /v pwd或者通过导出连接之后查看文…

Unable to connect to Redis server

报错内容: Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

【实用安装教程】在win系统下制作Mac OS镜像启动U盘

第一步:制作Mac OS系统引导镜像启动U盘 准备一个8G(或以上)的U盘插入到win系统的电脑上 去下载TransMac(Mac启动盘制作工具)v10.4按照说明安装好 插入准备好的U盘,U盘数据要转移,打开TransMac,右键U盘选…

ssm基于echarts的基金交易网站的设计与实现论文

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

基于Spring Boot+Vue的学生信息管理系统【附源码】

介绍 1)登录模块:用户通过输入可以输入编号、邮箱、手机号和密码来登录系统,如果输入错误会返回登录界面,并提示错误信息,成功登录后用户的登录信息会存储在浏览器中,系统会根据这些信息判断该用户的操作权限。 2)系统…

Windows反调试技术学习

Windows反调试 前言元旦快乐!!!通过 API 调用IsDebuggerPresentCheckRemoteDebuggerPresent(NtQueryInformationProcess)OutputDebugStringZwSetInformationThread(ThreadHideFromDebugger) 手动…

智能合约开发(1)

准备: 注册智能合约在线开发平台,用于solidity语言的智能合约开发。在浏览器上安装metamask钱包插件,并注册账号 以太坊智能合约平台地址: https://remix.ethereum.org 4小时速成solidity开发教程 https://www.youtube.com/watc…

Spring中Autowired原理

1. 构造方法参数Autowire BeanClass可以在构造方法上标注Autowired注解,Spring在创建Bean实例时将自动为其注入依赖参数;Spring会优先使用标注Autowired注解的构造方法;当一个构造方法标注了Autowired注解且requiredtrue时,其余构…

【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言 本文分享“占用网络”方案中,来自CVPR2023的VoxFormer,它基于视觉实现3D语义场景补全。 使用Deformable Attention从图像数据中,预测三维空间中的体素占用情况和类别信息。 VoxFromer是一个两阶段的框架: 第一个阶段&…

理解UML中的依赖关系

理解UML中的依赖关系 在面向对象的设计中,理解各种类之间的关系对于构建一个清晰、可维护的系统至关重要。UML(统一建模语言)为我们提供了一种可视化这些关系的方式。今天,我们将深入探讨UML中的依赖关系(Dependency&a…

苹果Vision Pro将于1月27日上市!

在无数期待中,苹果全新产品Vision Pro头显终于定下上市日期。 彭博社记者马克古曼(Mark Gurman)于近日在X(前推特)平台爆料了这一信息,预计苹果Vision Pro头显将于2024年1月27日率先在美国上市。 在过去看…

力扣92. 反转链表 II

链表 思路: 使用一个 dummy 指针迭代到 left;然后反转 (right - left) 个 node;之后将剩余的 node 继续串起来即可; class Solution { public:ListNode *reverseBetween(ListNode *head, int left, int right) {// 设置 dummyNo…

【QT】QString类型中,Empty和NULL有什么区别在qt里,对比C#

在 Qt 中,QString 类型的字符串使用 isEmpty() 方法来检查字符串是否为空,而不是使用 null。这与 C# 中的 string.IsNullOrEmpty 方法略有不同。 QString::isEmpty(): 用于检查字符串是否为空。一个 QString 对象可能是空字符串,即…

如何计算非线性负载的功率需求?

非线性负载的功率需求计算是一个相对复杂的过程,因为非线性负载的电流和电压之间的关系不是简单的正比关系。在计算非线性负载的功率需求时,需要考虑负载的特性、工作状态以及电源电压等因素。 确定负载的类型:首先需要了解负载的具体类型&am…

客户端、服务端在一个c++程序里

一个项目,同时包含客户端、服务端的设计模式称为双工/双端模式。 这种设计模式下,程序具有同时作为客户端和服务端的功能,可以与其他程序通信,并作为服务端接收其他程序的请求。 若开发双工模式的系统,需具备以下内容…

【C语言】浙大版C语言程序设计(第三版) 练习7-4 找出不是两个数组共有的元素

前言 最近在学习浙大版的《C语言程序设计》(第三版)教材,同步在PTA平台上做对应的练习题。这道练习题花了比较长的时间,于是就写篇博文记录一下我的算法和代码。 2024.01.03 题目 练习7-4 找出不是两个数组共有的元素 作者 张彤…

BIO、NIO

网络通信基本常识 什么是socket? socket 是应用层与 TCP/P 协议族通信的中间软件抽象层,它是一组接口,主机A 的应用程序要能和主机B 的应用程序通信,必须通过 Socket 建立连接。 短连接 SOCKET 连接发送完数据后马上断开连接 长连接 建…

RocketMQ单机部署完整学习笔记

文章目录 前言一、RocketMQ是什么?二、使用步骤1.安装MQ1.安装JDK2.安装mq3.MQ配置(核心) 2.搭建可视化dashboard1.下载源码2.修改配置3.启动 3.整合java1.生产者2.消费者3.启动生产者4.启动消费者5.dashboard添加消费组 三、总结全部的配置 前言 本文是基于4.X版本…

静态网页设计——电影角(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 使用技术:HTMLCSSJS 主要内容:本网页主要利用HTML语言编写,简要介绍世界上一些主要国家,例如,中,…

K8S三种发布方式和声明式资源管理

蓝绿发布 把应用服务集群标记位两个组,蓝组和绿组,先升级蓝组,先要把蓝组从负载均衡当中移除,绿组继续提供服务,蓝组升级完毕,再把绿组从负载均衡当中移除,绿组升级,然后都加入回负载…