前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【初识Go】| Day2 数据类型、关键字、标识符

【初识Go】| Day2 数据类型、关键字、标识符

原创
作者头像
yussuy
修改2020-12-17 09:57:26
5420
修改2020-12-17 09:57:26
举报
文章被收录于专栏:咸鱼的进阶学习之路

数据类型

Go语言中,数据类型用于声明函数和变量。

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

Go语言的数据类型主要分为以下几种:布尔型、数字类型(包含整型、浮点型、复数)、字符串类型、派生类型。

Go数据类型
Go数据类型

布尔型

值为常量truefalse。if 和 for 语句的条件部分都是布尔类型的值,并且 ==< 等比较操作也会产生布尔型的值。

代码语言:txt
复制

var b bool = true

代码语言:txt
复制

数字类型

Go中位的运Go 语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型算采用补码。每种数值类型都决定了对应的大小范围和是否支持正负符号。

Go中位的运算采用补码。

1. 整数类型

Go提供有符号和无符号的整数类型,其中int8、int16、int32和int64四种大小截然不同的有符号整数类型,分别对应8、16、32、64 bit(二进制位)大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。

此外还有两种整数类型 int 和 uint,它们分别对应特定 CPU 平台的字长(机器字大小),其中 int 表示有符号整数,应用最为广泛,uint 表示无符号整数。**实际开发中由于编译器和计算机硬件的不同,int 和 uint 所能表示的整数大小会在 32bit 或 64bit 之间变化。**

**大多数情况下,我们只需要 int 一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。**

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

尽管在某些特定的运行环境下 int、uint 和 uintptr 的大小可能相等,但是它们依然是不同的类型,比如 int 和 int32,虽然 int 类型的大小也可能是 32 bit,但是在需要把 int 类型当做 int32 类型使用的时候必须显示的对类型进行转换,反之亦然。

Go 语言中有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 -2^(n-1) 到 2^(n-1)-1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2^n-1。例如,int8 类型整数的取值范围是从 -128 到 127,而 uint8 类型整数的取值范围是从 0 到 255。

哪些情况下使用 int 和 uint

程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len () 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。

反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。

2. 浮点类型

Go 语言提供了两种精度的浮点数 float32 和 float64。

  • 常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38;
  • 常量 math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308;
  • float32 和 float64 能表示的最小值分别为 1.4e-45 和 4.9e-324。
3. 复数

复数的值由三部分组成 RE + IMi,其中 RE 是实数部分,IM 是虚数部分,RE 和 IM 均为 float 类型,而最后的 i 是虚数单位。复数的运算法则可以查阅《复数运算法则》。

(复数可能更多用在数据挖掘或机器学习相关领域)

Go中复数:类型有两种,分别是 complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型。

声明复数的语法格式如下所示:

代码语言:txt
复制
/\* 

下面例子中 z 为复数的变量名,complex128 为复数的类型,“=” 后面的 complex 为 Go 语言的内置函数用于为复数赋值,x、y 分别表示构成该复数的两个 float64 类型的数值,x 为实部,y 为虚部。\*/

var z complex128 = complex(x, y)

// 可简写为:

z := complex(x, y)



// 通过 Go 语言的内置函数 real(z) 来获得该复数的实部

x = real(z)    

// 通过 Go 语言的内置函数 imag(z) 来获得该复数的虚部

y = imag(z) 

**复数也可以用 == 和!= 进行相等比较,只有两个复数的实部和虚部都相等的时候它们才是相等的。**

Go 语言内置的 math/cmplx 包中提供了很多操作复数的公共方法,实际操作中建议大家使用复数默认的 complex128 类型,因为这些内置的包中都使用 complex128 类型作为参数。

★字符类型

字符串中的每一个元素叫做 “字符”,在遍历或者单个获取字符串元素时可以获得字符。

Go 语言的字符有以下两种:

  • 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。
  • 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。

字符串类型

字符串就是一串固定长度的字符连接起来的字符序列,Go 的字符串是由单个字节连接起来。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本,即可支持中文。

派生类型

  • (a) 指针类型(Pointer)
  • (b) 数组类型
  • (c) 结构化类型 (struct)
  • (d) Channel 类型
  • (e) 函数类型
  • (f) 切片类型
  • (g) 接口类型(interface)
  • (h) Map 类型

清晰完备的预定义基础类型,使得开发跨平台应用时无须过多考虑符号和长度差异。

go数据类型长度1
go数据类型长度1
go数据类型长度2
go数据类型长度2

关键字

25 个关键字或保留字

Go语言只有 25 个关键字。

不像 C++ 关键字那么多,原本 C++98/03 有 63 个关键字,后来 C++11 又加了 10 个,变成了 73 个。

其中 13 个关键字与 C++ 相同(break、default、switch、case、if、else、const、continue、for、return、map、struct、goto),用法也是类似。其它的 12 个不同(func、interface、select、defer、go、chan、package、falthrough、range、type、import、var)。

序号

关键字

介绍

1

break

用于跳出循环

2

case

选择结构标签

3

chan

定义 channel

4

const

定义常量

5

continue

跳过本次循环

6

default

用于选择结构的默认选项(switch、select)

7

defer

延迟执行内容(收尾工作)有点类似 C++ 的析构,但是它是再函数结尾的时候去执行(也就是栈即将被释放的时候)

8

else

选择结构 - 否则

9

fallthrough

如果 case 带有 fallthrough,程序会继续执行下一条 case, 不会再判断下一条 case 的值

10

for

循环

11

func

定义函数

12

go

并发执行

13

goto

跳转语句

14

if

选择结构 - 如果

15

import

导入包

16

interface

定义接口

17

map

Map 是一种无序的集合,我们可以像迭代数组和切片那样迭代它,它是使用 hash 表来实现的。

18

package

包管理

19

range

从 slice、map 等结构中取元素

20

return

用于在函数内部,退出函数执行过程

21

select

go 语言特有的 channel 选择结构

22

struct

定义结构体

23

switch

选择结构

24

type

定义类型

25

var

定义变量

36 个预定义标识符

还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数,见下表:

内建常量

内建类型

内建函数

true

int

make

false

int8

len

iota

int16

cap

nil

int32

new

--

int64

append

--

uint

copy

--

uint8

close

--

uint16

delete

--

uint32

complex

--

uint64

real

--

uintprt

imag

--

float32

panic

--

float64

recover

--

complex64

--

--

complex128

--

--

bool

--

--

byte

--

--

rune

--

--

string

--

--

error

--

标识符

标识符用来命名变量、类型等程序实体。

一个标识符实际上就是一个或是多个字母 (A~ Z 和 a~ z) 数字 (0~9)、下划线 “_” 组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

在习惯上,Go 语言程序员推荐使用 **驼峰式** 命名,当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。

其他知识点

  • 程序一般由关键字、常量、变量、运算符、类型和函数组成。
  • 程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
  • 程序中可能会使用到这些标点符号:.,;:

参考资料

http://c.biancheng.net/view/13.html

https://www.runoob.com/go/go-data-types.html

https://github.com/datawhalechina/go-talent/blob/master/1.%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E3%80%81%E5%85%B3%E9%94%AE%E5%AD%97%E3%80%81%E6%A0%87%E8%AF%86%E7%AC%A6.md

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据类型
    • 布尔型
      • 数字类型
        • 1. 整数类型
        • 2. 浮点类型
        • 3. 复数
        • ★字符类型
      • 字符串类型
        • 派生类型
          • 25 个关键字或保留字
          • 36 个预定义标识符
      • 关键字
      • 标识符
      • 其他知识点
      • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档