golang基础(2)基础类型

zidea · · 655 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基本类型

在开始之前,先补充一下上一次分享的内容,是不可以重复为变量 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 的贴心。

int
unit

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

var x:unit8 = 255
x = x + 1 //0 (overflow)

x = 255
x = x + 3 // 2 (overflow)

x = 0
x = x - 1 // 255 (underflow)

x = 4
x = 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 = 5
var bar int32 = 7
foo = bar +foo; //comile error
var foo int64 = 5
var bar int32 = 7
foo = (int64)bar +foo; 

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

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

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

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

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:zidea

查看原文:golang基础(2)基础类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

655 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传