12|基本数据类型:Go原生支持的数值类型有哪些?

被广泛使用的整型
- 深入了解
- 翻译
- 解释
- 总结
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(33)
- 最新
- 精选
- 罗杰float 其实相当复杂,开发中如果能避开就避开,例如金钱单位只有美元或者人民币我建议以分作为单位。
作者回复: 嗯,是这样的。
658 - liaomarsvar f1 float32 = 16777216.0 var f2 float32 = 16777217.0 f1 == f2 // true f1 转换成二进制是:1266679808 f2 转换成二进制也是:1266679808 这个为什么是相等的,是因为转换成二进制的数据是相等的。
作者回复: 👍
38 - jc9090kkktype Myint int32 这种自定义类型在实际应用中有什么优势吗?
作者回复: 采用自定义类型时,我们考虑的角度不是优劣,而是需求。以type Myint int32为例,我们这么做,显然是因为int32不能满足我们的需求。哪些需求不能满足呢?第一个就是抽象,我们要建立更高级的抽象;第二个是我们不能为go原生类型int32增加我们想要的方法,只有通过自定义类型来实现。
25 - 羊羊0x1.Fp+0 // 1.9375 * 2^0 = 1.937500这个是如何计算得到的?0x1.F=1.9375是如何得到的?
作者回复: 0x1.Fp+0中的F是十六进制数,它的十进制值为15。F在小数点后一位,因此上面数字的小数部分0.F转换为10进制小数就是15 x 16^(-1)=0.9375
11 - 在下宝龙、type Myint int type MyMapp map[string]int func main(){ var x Myint var y int x=y//会报错 mp1:=make(MyMapp) mp2:=make(map[string]int) mp1=mp2 //不会报错 } 老师为甚么map就不会报错
作者回复: int与map[string]int虽然都是go原生类型,但它们却有不同。int在go中被归为defined type一类,而map[string]int则不是defined type。因此两个defined type: int与MyInt相互赋值必须显式转型。而map[string]int与MyMapp中,前者不是defined type,go语言有规定:这种情况下,可以直接赋值。具体参考这里:https://golang.google.cn/ref/spec#Assignability
7 - 松func main() { var f2 float32 = 16777216.0 var f3 float32 = 16777217.0 // 1001011100000000000000000000000 fmt.Printf("%b\n", math.Float32bits(f2)) // 1001011100000000000000000000000 fmt.Printf("%b\n", math.Float32bits(f3)) } 变量的二进制表示一样,所以相同了
作者回复: 👍
6 - 运维夜谈老师,自定义类型和类型别名有什么样的应用场景?比如自定义一个类型,本质还是int32,那为啥不直接用int32,看起来感觉有点语法糖的意思,用处不大,特别是类型别名😢
作者回复: 原生的int32不能有方法,但自定义类型可以有方法哦。比如我定义一个名为Age的类型:type Age int32。Age可以作为“年龄”的抽象。我们可以为Age定义方法。至于类型别名,更多用于重构代码或基于已有包的二次封装。
25 - ryanxw工程开发中尽量不用浮点,像我们都要求用string来存价格
作者回复: 浮点用起来的确坑挺多。当然这也和其他实现原理有关。
4 - tequ1lAneio老师好,类型别名具体会在哪些场景用得到呢?
作者回复: 类型别名加入go的初衷就是为了重构,这也是其主要场景。在第17讲中还会有提及。
4 - 顾海白老师,github地址是什么
作者回复: 你是指本专栏的对应的示例代码仓库么?专栏的普通章节 示例代码都很短,没有放到代码仓库中。对于实战小项目,仓库地址在https://github.com/bigwhite/publication/tree/master/column/timegeek/go-first-course。 我个人github是:https://github.com/bigwhite 不知道是否回答了你的问题:)。
3