golang基础(2)基础类型

栏目: Go · 发布时间: 5年前

内容简介:在开始之前,先补充一下上一次分享的内容,是不可以重复为变量 foo 初始化赋值的。我是一名 web 前端出身的 developer,接触最早也是接触最多还是 javascript ,所以学习任何其他新的语言我都喜欢给 javascript 对比地来学。在 javascript 数据类型中对于数值只有 number 类型也就是 float 类型,而在 go 语言却进行相当细致的划分数值类型,应该是为了效率,节省内存空间吧。更准确地为变量分配内存空间。关于这些数据类型,我就不做过多解释 int 代表整数型,后面

基本类型

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++语言的设计和演化

C++语言的设计和演化

[美] Bjarne Stroustrup / 裘宗燕 / 机械工业出版社 / 2002-1 / 48.00元

这本书是C++的设计者关于C++语言的最主要著作之一。作者综合性地论述了C++的历史和发展,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景。一起来看看 《C++语言的设计和演化》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器