Go语言的数据类型-第一部分

1 概述

Go语言作为类C语言,支持常规的基础数据类型的的同时,支持常用的高级数据类型。他们是:

整数,int,uint,int8,uint8,int16,uint16,int32,uint32,int64,uint64

浮点(小数),float32,float64

复数,complex

字符,byte,rune

字符串,string

布尔,bool

指针,pointor

数组,array

nil

切片,slice。(引用类型)

映射,map

结构体,stuct

接口,interface

通道,channel

函数,func()

2 整数

支持的整型分类很细,主要差异是占用的存储空间不同。基于有无符号列出为:

有符号的:int,int8,int16,int32,int64

无符号的:uint,uint8,uint16,uint32,uint64

其中int, unit是基于处理器架构的。意味着会根据处理器来确定是32bit还是64bit。

使用时,常常使用int。或者使用int32保证兼容。

在类型推导时,推导的整型为int,其他长度整型需要在定义变量时强制声明。

示例:

整型的默认值为0。

3 浮点数

支持IEEE-754标准浮点数。支持32bit和64bit的浮点数float32和float64。

在类型推导时,推导的浮点型为float64。float32需要在定义变量时强制声明。

示例:

浮点数的默认值为0。

4 复数

原生支持复数。

支持32bit+32bit复数complex64,和64bit+64bit的复数complex128。

5 字符

使用单引号定义字符型数据,字符指的是单个字符。有两种byte和rune:

byte:单字节字符,是uint8的别名。用于存储ASCII字符集字符

rune:多字节字符,是int32的别名。用于存储unicode字符集字符。

在类型推导时,推导的字符型为rune。byte需要在定义变量时强制声明。

示例:

字符的默认值是0。字符的本质就是整数型,根据字符集得到对应的字符。

6 字符串

原生支持字符串。使用双引号(“”)或反引号(``)定义,内部是unicode编码。

双引号:””, 用于单行字符串。

反引号:``,用于定义多行字符串,内部会原样解析。

示例:

字符串支持转义字符,列表如下:

转移符 含 义

\r 回车符(返回行首)

\n 换行符(直接跳到下一行的同列位置)

\t 制表符

\’ 单引号

\” 双引号

\ 反斜杠

\uXXXX Unicode字符码值转义

7 布尔型

布尔型的值只可以是常量 true 或者 false。

示例:

8 指针

指针类型用于存储变量地址。使用运算符&,完成操作。

使用运算符p:=&v可以获取v变量的地址。p中的数据格式类似,是一个内存地址的16进制表示。

使用运算符p可以获取指针p指向变量v的值。

如图所示:

在Go语言中,指针主要用于:

类型指针,对指针指向的数据进行修改。函数调用时传递参数使用指针,避免值传递拷贝额外数据。注意类型指针不能进行偏移和运算。

切片,由指向起始元素的原始指针、元素数量和容量组成。

示例:

9 数组

数组是一段固定长度的连续内存区域。是具有相同类型数据元素序列。元素类型支持任意内置类型。

数组从声明时就确定长度,可以修改数组元素,但是数组不可修改长度。

使用 进行数组的声明。

示例:

会使用类型默认值初始化元素。

数组不是引用类型,变量间为值传递。

可以使用range配合循环结构完成遍历,示例如下:

10 nil

nil,可以理解为未初始化引用。是以下类型的默认初始值:

pointers -> nil

slices -> nil

maps -> nil

channels -> nil

functions -> nil

interfaces -> nil

11 切片

切片是一个拥有相同类型元素的可变长度的序列。与数组的固定长度不同,切片也被称之为动态数组。

Go提供了4中方案定义切片:

或者从数组或切片生成新切片:

slice [开始索引:结束索引]

slice 表示目标切片对象。

开始索引和结束索引对应目标切片的索引。

不包含结束索引对应的元素

缺省开始索引,表示从头到结束索引。

缺省结束索引,表示从开始索引到末尾。

两者同时缺省时,全部切取,与切片本身等效。

两者同时为0时,等效于空切片,一般用于切片复位。

以从数组创建切片为例,理解切片,定义语法如上所示,下图为slice:

切片的实现是由一个底层数组以及其上面的动态位置,尺寸来实现。由内部由指向起始元素的指针、元素数量length和容量capacity组成。其中:

指针ptr,用于指向切片在底层数组的起始位置。

尺寸len,用于记录切片内元素数量。

容量cap,当前切片最大容量,也就是底层数组的容量。可以动态分配。

切片为引用类型。

切片的默认初始值为nil。

切片支持: len()尺寸, cap()容量, append()追加元素等操作。详见切片的使用。

晚安,一家之言,欢迎讨论

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181020G00E3C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券