Go语言带你一起飞--数据类型

     Go语言和Java相同,支持多种数据类型,只是相对于Java来讲,有些数据类型发生了些许的变化。在Go中主要有整数类型、复数类型、数组类型、切片类型、字典类型和结构体类型。这几种类型与Java的对比整理如下:

类型名称    Go Java
整数类型 10种整数类型 4种
复数类型 complx64/complex128

数组类型

与Java基本一致 与Go基本没有差别
字典类型 本质上,字典类型是map的一种实现,用于存储键值对的无序组合。 相当于Java中的map
结构体类型 关键字为struct,形如: p:= struct{ Name string, Age uint8} 相当于Java中的实体构建
切片类型 与数组类似,可以理解成对数组的切分操作
备注     在Go中声名类型时,首字母消息,比如Java中的String在Go中表示为string  

接下来我们从更细的力度来了解一下Go语言。

▶ 整数类型

     从上面表格中我们了解到,在Go的整数类型中共有十种,在这十种整数类型中,我们可以分为与计算架构相关和不相关两个类别。与计算架构相关的分别是有符合的整数类型int和无符号的整数类别unint。

      如下图所示,在不同的计算架构的计算机上,这两种类型体现的宽度是不同的,也就是说存储这一类型的值所需要的空间是不一样的。

Go语言带你一起飞--数据类型_第1张图片

另外八种与计算架构无关的类型,它们的宽度已经直接体现在类型名称中了:

Go语言带你一起飞--数据类型_第2张图片

      但需要注意的是,在Go中进行数据类型之间的比较时,需要根据当前数据类型的范围进行适当的比较,比如Index变量是int型时,如果在程序中直接对index变量进行减一的结果进行比对,会发现永远不会成立;在这种情况下与Java区别的本质是整数数据类型的区分。

▶ 浮点数和复数

    在Go语言中,有两种浮点类型(float32,float64)和两种复数类型(complex64,complex128),而两种复数类型分别由float32和float64来完成的。比如,complex64类型的值会由两个float32类型的值来分别表示复数的实数部分和虚数部分。而complex128类型的值会由两个float64类型的值分别表示复数的实数部分和虚数部分。

     复数类型的值一般由浮点数表示的实数部分和“+”、浮点数表示的虚数部分以及小写字母“i”组成。比如3.7E+1+5。98E-2i。关于复数的表示法代码如下:

package main

import ( 
    "fmt" 
)

func main() {
    var num3 = 3.7E+1 + 5.98E-2i
    
    // 这里用到了字符串格式化函数。其中,%E用于以带指数部分的表示法显示浮点数类型值,%f用于以通常的方法显示浮点数类型值。
    fmt.Printf("浮点数 %E 表示的是 %f。\n", num3, (37.000000+0.059800i))
}

▶ 数组类型

     在Go中的数组类型,与Java中的差别不大,所以这里不再赘述;

▶  切片类型

     与Java相比,在Go中特有的切片类型,与数组类似,都是可以容纳若干类型相同的元素的容器,但是与数组不同的是,我们无法通过切片类型来确定其值得长度;切片类型的变量表示为[]类型{值},比如[]int{1,2,3}。在切片类型中包含一种切片操作:

var numbers3 = [5]int{1, 2, 3, 4, 5}
var slice1 = numbers3[1:4]

        在上述代码中,number3[1,4]被称为切片表达式,个人理解,这个切片操作类似于对数组的截取。在切片类型中,下标索引从0开始。在该表达式中,切片表达式的求值结果相当于以元素下界索引和元素上界索引作为依据从被操作对象上“切下”而形成的新值【1为下界索引,4为上界索引】。但在切片的操作中,“切下”的结果不包含上界索引指向的数据,所以slice1的结果为{2,3,4}。

        当然我们也可以对切片继续进行切片操作,var slice2 = slice1[1:3],此时slice2的结果为{3,4},PS:作为切片表达式中的求值结果中切片值得长度也就是结果中的数据个数,总是元素上界索引和下界索引的差值

        在切片类型中,切片值以及数组值都还有另外一个属性---容量,数组值的容量总是等于其长度,而切片值的容量则往往与其长度不同

Go语言带你一起飞--数据类型_第3张图片

   如上图所示,一个切片值的容量就是它第一个元素值在其底层数组中的索引值与该数组长度差值的绝对值。当然,我们可以使用cap函数来获取数组、切片或通道类型(稍后会讲到)的值的容量:

var capacity2 int = cap(slice2)
     要注意,切片类型属于引用类型,它的零值就是nil,也就是我们所说的空值。如果我们只声明了一个变量而没有赋值,那么这个变量的值是nil,就像是在Java中我们只声明变量,未初始化时为null是一个道理。

     由于篇幅原因,数据类型先到这里,通道和字典类型会在下篇博文中继续讲述!

Go语言带你一起飞--数据类型_第4张图片


你可能感兴趣的:(♣【玩转Go】)