为了账号安全,请及时绑定邮箱和手机立即绑定

golang基础(2)基础类型

标签:
Java


基本类型

在开始之前,先补充一下上一次分享的内容,是不可以重复为变量 foo 初始化赋值的。

foo := 'hello'foo := "world"

我是一名 web 前端出身的 developer,接触最早也是接触最多还是 javascript ,所以学习任何其他新的语言我都喜欢给 javascript 对比地来学。在 javascript 数据类型中对于数值只有 number 类型也就是 float 类型,而在 go 语言却进行相当细致的划分数值类型,应该是为了效率,节省内存空间吧。更准确地为变量分配内存空间。

int8
int16
int32
int64

float32
float64

关于这些数据类型,我就不做过多解释 int 代表整数型,后面 8 代表的占内存大小也是就是这个数据类型的取值范围,int8 的取值范围为 -128 到 128 之间。

这两类型为一些算法会用到,complex64 为两个 float32 组合,complex128 则为两个 float64 的组合

complex64
complex128

一种无符号的整数类型 uintptr,用于保存内存地址,没有指定具体的 bit 大小但是足以容纳指针。uintptr 类型只有在底层编程是才需要,特别是 Go 语言和 C 语言函数库或操作系统接口相交互的地方。

uintptr

Unicode字符rune类型是和 int32 等价的类型,便于表示一个 Unicode 字符同样byte也是 uint8 类型的等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数。

byte //  unit8 的别名rune // int32 的别名

当然还有表示正整数的类型 unit8 前面 u 代表无符号,也就是默认为正那么 unit8 的取值范围就是 0 - 255

unit8
uint16

当然还有默认的没有位数的 int 和 unit,这么多数据类型,让我们感觉到 javascript 对 developer 的贴心。

intunit

下面介绍一些在给指定数据类型的变量赋值的一些注意事项分别是 overflow 和 underflow

var x:unit8 = 255x = x + 1 //0 (overflow)x = 255x = x + 3 // 2 (overflow)x = 0x = x - 1 // 255 (underflow)x = 4x = x - 10 // 250 (underflow)

当我们为类型为 unit8 (取值范围0 -255)赋值 255 然后为变量加1后重新为 x 赋值时,这是 x = 256 超出了 unit8 的取值范围,在这种情况编译器会将 x = 0 这就是 overflow 情况也就是变量值溢出了其类型取值范围。
同样对于 underflow 情况当 x = 0 时然后对 x 进行减 1 后重新赋值会得到 x = 255 结果。
有关 float 类型的 overflow 和 underflow 因为精度比较复杂,以后随着深入学习再给大家解释,在此暂时忽略。

var foo int64 = 5;var bar int32 = 7;
foo = bar; // compile error

不同类型数据是无法相互赋值,我们不能把 int32 类型的 bar 直接赋值给 int64 类型的 foo,需要进行类型转换后进行赋值。

var foo int64 = 5;var bar int32 = 7;
foo = (int64)bar; // 类型转换

同理,不同类型的变量是无法进行运算的也需要转为同一类型后才可以进行运算。

var foo int64 = 5var bar int32 = 7foo = bar +foo; //comile error
var foo int64 = 5var bar int32 = 7foo = (int64)bar +foo;

注意的这里 int 类型并不等于 unit8 而且直接赋值给 unit8 类型 bar 需要类型转换,由于 overflow 的原因转换类型后其值也会从 500 变为 244

var foo int = 500var bar uint8 = uint8(foo); //244

当我们使用 := 对变量初始化赋值时,需要注意其默认的数据类型分别 int 和 float64.

bar := 7 //var bar int = 7foo := 7.3; //var foo float64 = 7.3
var foo int32 = 5;var bar int = 7;
bar = foo; // int 和int32 通常是不同的类型



作者:zidea
链接:https://www.jianshu.com/p/788d42bd1c5a


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消