Go语言从入门到精通 - 数据类型转换

本节核心内容

  • 介绍 Go语言数据类型转换的格式
  • 介绍 数据转换代码示例
  • 介绍 数据转换过程中的注意事项

    本小节视频教程和代码:百度网盘

    可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

Go语言数据类型转换

Go 语言使用类型前置加括号的方式进行类型转换,一般格式如下:

T(表达式)

其中,T 代表要转换的类型。表达式包括变量、复杂算数和函数返回值等。

类型转换时,需要考虑两种类型的关系和范围,是否会发生数值截断等,参见下面代码:

package main
import ("fmt""math"
)
func main() {// 输出各数值范围fmt.Println("int8 range:", math.MinInt8, math.MaxInt8)fmt.Println("int16 range:", math.MinInt16, math.MaxInt16)fmt.Println("int32 range:", math.MinInt32, math.MaxInt32)fmt.Println("int64 range:", math.MinInt64, math.MaxInt64)// 初始化一个32位整型值var a int32 = 1047483647// 输出变量的十六进制形式和十进制值fmt.Printf("int32: 0x%x %d\n", a, a)// 将a变量数值转换为十六进制, 发生数值截断b := int16(a)// 输出变量的十六进制形式和十进制值fmt.Printf("int16: 0x%x %d\n", b, b)// 将常量保存为float32类型var c float32 = math.Pi// 转换为int类型, 浮点发生精度丢失fmt.Printf("转换前c的值为:%v;转换后c的值为:%v",c,int(c))
}

代码说明如下:

  • 第 11~14 行,输出常见整型类型的数值范围。
  • 第 17 行,声明 int32 类型的 a 变量并初始化。
  • 第 19 行,使用 fmt.Printf 的%x动词将数值以十六进制格式输出。这一行输出 a 在转换前的 32 位的值。
  • 第 22 行,将 a 的值转换为 int16 类型,也就是从 32 位有符号整型转换为 16 位有符号整型。由于 16 位变量没有 32 位变量的数值范围大,因此数值会进行截断。
  • 第 24 行,输出转换后的 a 变量值,也就是 b 的值。同样以十六进制和十进制两种方式进行打印。
  • 第 27 行,math.Pi 是 math 包的常量,默认没有类型,会在引用到的地方自动根据实际类型进行推导。这里 math.Pi 被存到 c 中,类型为 float32。
  • 第 29 行,将 float32 转换为 int 类型并输出。

代码输出如下:

int8 range: -128 127
int16 range: -32768 32767
int32 range: -2147483648 2147483647
int64 range: -9223372036854775808 9223372036854775807
int32: 0x3e6f54ff 1047483647
int16: 0x54ff 21759
转换前的值为:3.1415927;转换后的值为:3

根据输出结果,16 位有符号整型的范围是 -32768~32767,而 a 变量的 1047483647 不在这个范围内。1047483647 对应的十六进制为 0x3e6f54ff,转为 16 位变量后,长度缩短一半,也就是在十六进制上砍掉一半,变成 0x54ff,对应的十进制值为 21759。

浮点数在转换为整型时,会将小数部分去掉,只保留整数部分。

整型截断在类型转换中发生的较为隐性,有些即为难追查的问题,很小一部分是由整型截断造成。

小结

本小节讲解了Go语言中一般数据转换的格式,以及通过代码演示讲解了在进行数据转换时,会存在数据截断转换的问题。

转载于:https://www.cnblogs.com/Survivalist/articles/10287398.html

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

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

相关文章

JNI通过线程c回调java层的函数

1、参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2、参看博客: JNI层线程回调Java函数关键点及示例 http://blog.csdn.net/fu_shuwu/article/details/41121741 3 http://blog.cs…

signature=f7a4b29b93ef2b36608792fdef7f454a,Embedding of image authentication signatures

摘要:A method (), an apparatus, a computer readable medium and use of said method for authenticating an audio-visual signal (), such as a digital image or video, are disclosed. A signature is derived from all image regions, including areas with …

glob

主要是用来在匹配文件,相当shell中用通配符匹配. 用法: glob.glob(pathname) # 返回匹配的文件作为一个列表返回 glob.iglob(pathname) # 匹配到的文件名,返回一个迭代器 ps: pathname是路径, 可以是绝对和相对路径 匹配当前目录下有一个数字开头…

构建微服务:Spring boot 入门篇

Spring官方网站本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系。随着Spring 3.0的发布,Spring IO团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定优先配…

img 加载 svg占位符_如何使用SVG作为占位符以及其他图像加载技术

img 加载 svg占位符by Jos M. Prez由JosM.Prez 如何使用SVG作为占位符以及其他图像加载技术 (How to use SVG as a Placeholder, and Other Image Loading Techniques) I’m passionate about image performance optimisation and making images load fast on the web. One of…

hibernate 注解

参考链接地址:https://blog.csdn.net/wx5040257/article/details/78697119 主键生成策略:https://www.cnblogs.com/ph123/p/5692194.html 注解转载于:https://www.cnblogs.com/wangxuekui/p/10287647.html

iOS - UIScrollView

前言 NS_CLASS_AVAILABLE_IOS(2_0) interface UIScrollView : UIView <NSCoding>available(iOS 2.0, *) public class UIScrollView : UIView, NSCoding 移动设备的屏幕大小是极其有限的&#xff0c;因此直接展示在用户眼前的内容也相当有限。当展示的内容较多&…

机器学习的展望

现阶段越来越多的投入到机器学习的热潮中来&#xff0c;有的人很是兴奋&#xff0c;认为这是一场新和革命&#xff0c;一场终极人工智能来临的前夜。也有人表示悲观&#xff0c;认为不仅机器学习不代表终极人工智能&#xff0c; 也还非常不成熟。 大量的新生代投入到这个领域&a…

BZOJ3453 XLkxc(拉格朗日插值)

显然f(i)是一个k2项式&#xff0c;g(x)是f(i)的前缀和&#xff0c;则显然其是k3项式&#xff0c;插值即可。最后要求的东西大胆猜想是个k4项式继续插值就做完了。注意2p>maxint…… #include<iostream> #include<cstdio> #include<cmath> #include<cs…

电邮地址_利用这些简单的技巧来充分利用电子邮件的强大功能

电邮地址Let’s talk about some email features that are surprisingly under-used, and that can really benefit you — if you know how to use them. This article is suitable for both users and developers who want to become email Jedi.让我们讨论一些电子邮件功能&…

inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题

变量提升真的搞懂了吗&#xff1f;打脸的一道题我们知道JS代码在执行之前&#xff0c;会做一系列的事情&#xff0c;其中就包括变量提升&#xff0c;原本以为把变量提升搞懂的我&#xff08;因为这两天一直在研究变量提升&#xff0c;自我感觉已经很良好了&#xff0c;哈哈哈&a…

html5语义化 兼容,HTML5语义化标签,兼容性问题

HTML5不仅仅作为HTML标记语言的一个最新版本&#xff0c;更重要的是它制定了web应用开发的一系列标准&#xff0c;成为第一个将web做为应用开发平台的HTML语言。HTML5定义了一系列的新元素&#xff0c;如新语义化标签&#xff0c;智能表单&#xff0c;多媒体标签等&#xff0c;…

Swift之 vm10虚拟机安装Mac OS X10.10教程

VM10装Mac OS X 10.9.3及更新到Mac OS X 10.10,让你的windows也能玩Swift 。 近期WWDC放出终极大招——新的编程语言Swift(雨燕),导致一大波程序猿的围观和跃跃欲试。当然了,工欲善其事,必先利其器,所以对于那些没有Mac又想要尝鲜的小伙伴肯定非常为难。可是&#xff0c;请放…

如何使用json开发web_如何通过使用JSON Web令牌简化应用程序的身份验证

如何使用json开发webby Sudheesh Shetty由Sudheesh Shetty 如何通过使用JSON Web令牌简化应用程序的身份验证 (How to simplify your app’s authentication by using JSON Web Token) Every application we come across today implements security measures so that the user…

c++ 实现录音并且指定到文件_通话自动录音,留下美好回忆,记录完整录音证据...

手机通话&#xff0c;如果自动录音多好&#xff0c;许多人与我一样抱有这个想法。记得华为Android版本5.0时代&#xff0c;手机没有自动录音功能&#xff0c;我一直到网上下载自动通话录音软件&#xff0c;有时甚至是下载ROOT版的带自动通话功能的EMUI版本进行刷机安装。那个时…

2639-Bone Collector II (01背包之第k优解)

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid2639 求第k优解的关键代码&#xff1a; 用两个数组记录两种状态&#xff08;选择或不选择&#xff09;&#xff0c;并且只要记录前k次。在这两个数组中都是前k次可能的最优解。所以我们只要把这两个数组做比较…

html自动按键,VBS脚本和HTML DOM自动操作网页

本来是想通过JS实现对其他页面的控制&#xff0c;发现跨域无法获取页面DOM来操作。接着考虑bat&#xff0c;发现也实现不了&#xff0c;于是想到vbs。vbs还是很强大啊&#xff0c;病毒之类很多都是vbs脚本啊。vbs打开浏览器&#xff0c;然后通过dom来操作页面&#xff0c;可以实…

opencv在同一窗口打印多张图片

首先&#xff0c;由于cv2处理的图片是通过ndarray的格式操作的&#xff0c;也就是说通过array的拼接就可以实现图片的拼接&#xff0c;那么之后就可以通过简单的imshow将合并的图片打印从而达到在一个窗口中显示多张图片的目的。 import cv2 import numpy as npimg1 cv2.imrea…

dj打碟怎么学_学DJ打碟 - Rane声卡连接

上一篇内容中&#xff0c;老师讲过在学DJ打碟的时候&#xff0c;是离不开对软件方面的操作&#xff0c;其实每一个学习过程&#xff0c;当你学会之后&#xff0c;在“回头看”的时候&#xff0c;都会觉得&#xff1a;原来学DJ打碟这么简单啊&#xff0c;这就是已经学习过的人会…

微信企业号第三方应用开发[一]——创建套件

注&#xff1a;文中绿色部分为摘自微信官方文档 第三方应用提供给企业的是一个应用&#xff0c;但是应用必须在套件下创建&#xff0c;所以第一步是要创建套件。 注册成为应用提供商&#xff0c;必须输入以下信息&#xff1a; 信息项要求及说明企业Logo应用提供商的企业Logo&am…