写点什么

Go 基础数据类型使用实战:int float bool

作者:王中阳Go
  • 2022-10-18
    北京
  • 本文字数:1448 字

    阅读完需:约 1 分钟

Go基础数据类型使用实战:int float bool

int

定义 int 类型


var int1 = 1fmt.Printf("int1类型:%T\n", int1)
复制代码


输出结果:


int1类型:int
复制代码


注意:%T 查看变量的类型

进制转化

var i1 = 101fmt.Printf("%d\n", i1) //转成十进制fmt.Printf("%b\n", i1) //把十进制转成二级制fmt.Printf("%o\n", i1) //把十进制转成八进制fmt.Printf("%x\n", i1) //把十进制转成十六进制fmt.Println("-----")
复制代码


输出结果:


数值为:101把十进制转成二级制:1100101把十进制转成八进制:145把十进制转成十六进制:65
复制代码

定义八进制

八进制一定是以 0 开头的,逢八进一位


i2 := 077fmt.Printf("i2十进制:%d\n", i2)fmt.Printf("i2八进制:%o\n", i2)fmt.Printf("i2类型%T\n",i2)
复制代码


输出结果


i2十进制:63i2八进制:77i2类型int
复制代码

定义十六进制

从 0 到 f,逢十六进一


i3 := 0x1234567fmt.Printf("i3十进制:%d\n", i3)fmt.Printf("i3十流进制:%x\n", i3)// %T 查看变量的类型fmt.Printf("i3十进制数据类型:%T\n", i3)
复制代码


输出结果


i3十进制:19088743i3十六进制:1234567i3十进制数据类型:int
复制代码


总结:我们发现直接定义十进制、八进制、十六进制的变量,变量的类型都是 int 型。

抛出问题

我们怎么定义 int8/int16/int32/int64 类型的数据呢?


其实非常简单:


i4 := int8(1)i5 := int16(1)i6 := int32(1)i7 := int64(1)fmt.Printf("i4:%T\n", i4)fmt.Printf("i5:%T\n",i5)fmt.Printf("i6:%T\n",i6)fmt.Printf("i7:%T\n",i7)
复制代码


输出结果:


i4:int8i5:int16i6:int32i7:int64
复制代码


抛出问题:go 有这么多种 int 类型,我们怎么选择使用哪种呢?


给出答案:


我们首先要知道这些类型的区别:


  • int8 类型大小为 1 字节

  • int16 类型大小为 2 字节

  • int32 类型大小为 4 字节

  • int64 类型大小为 8 字节

  • int 类型的大小为 4 个字节 或者 8 个字节


其中 int 类型要重点说一下:go 语言中的 int 的大小是和操作系统位数相关的,如果是 32 位操作系统,int 类型的大小就是 4 字节。如果是 64 位操作系统,int 类型的大小就是 8 个字节。


由此我们可以知道,根据自己需要的字节数来选择,当然选择 int 类型是最省心安全的,但是当我们取值范围小的时候,会浪费存储空间。

float

go 中的 float 可以细分为:float32 和 float64

定义 float

f1 := 1.0fmt.Printf("f1类型:%T\n", f1) // Go语言中的小数默认类型是:float64
复制代码


输出结果:


f1类型:float64
复制代码


分析:在未指定类型定义 float 时,默认的类型是 float64。和 int 类型的定义是一致的。


反思:这种设计我们也可以很好理解,出于数据安全的考虑,设置数据类型对应的最大内存空间的类型,避免内存溢出等问题。

定义 float32 类型

聪明的你一定会想到,和定义 int8 是一样的


f2 := float32(1.4321)fmt.Printf("%T\n", f2)
复制代码


输出结果:


f2类型:float32
复制代码

小技巧

我们可以通过内置的 Math 函数,获得常用的数值,比如:


var maxFloat = math.MaxFloat32;println(maxFloat)
复制代码


输出结果:


+3.402823e+038
复制代码

注意

在 go 中,数据类型是有严格的区分的,不同类型之间是不能互相转换的,比如:


bool 类型

定义

b1 := truefmt.Printf("b1类型:%T\n", b1)
复制代码


输出结果:


b1类型:bool
复制代码

默认值为 false

var b2 bool// 前面有2个% 后面也要传2次参数fmt.Printf("b2类型为:%T 值为: %v\n", b2, b2)
复制代码


输出结果:


b2类型为:bool 值为: false
复制代码

总结

  1. Go 语言中对类型有严格的要求,不同类型之间不能直接转换,哪怕 int8/int16 之间也不能转换。

  2. 声明变量同时赋值的方式,如果没有指定明确的数据类型,会默认使用范围大的类型,比如:int、float64、false

一起学习,升级打怪

我们搞了一个对学 Go 真正有帮助的群,欢迎加入:


公众号:程序员升级打怪之旅


微信号:wangzhongyang1993

发布于: 刚刚阅读数: 3
用户头像

王中阳Go

关注

公众号:程序员升级打怪之旅 2022-10-09 加入

微信:wangzhongyang1993

评论 (1 条评论)

发布
用户头像
Go语言中对类型有严格的要求,不同类型之间不能直接转换,哪怕int8/int16之间也不能转换。
刚刚 · 北京
回复
没有更多了
Go基础数据类型使用实战:int float bool_Go_王中阳Go_InfoQ写作社区