Go语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go语言的数据类型主要分为以下几种:布尔型、数字类型(包含整型、浮点型、复数)、字符串类型、派生类型。
值为常量true
或false
。if 和 for 语句的条件部分都是布尔类型的值,并且 ==
和 <
等比较操作也会产生布尔型的值。
var b bool = true
Go中位的运Go 语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型算采用补码。每种数值类型都决定了对应的大小范围和是否支持正负符号。
Go中位的运算采用补码。
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。
程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len () 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。
反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。
Go 语言提供了两种精度的浮点数 float32 和 float64。
复数的值由三部分组成 RE + IMi,其中 RE 是实数部分,IM 是虚数部分,RE 和 IM 均为 float 类型,而最后的 i 是虚数单位。复数的运算法则可以查阅《复数运算法则》。
(复数可能更多用在数据挖掘或机器学习相关领域)
Go中复数:类型有两种,分别是 complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型。
声明复数的语法格式如下所示:
/\*
下面例子中 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 语言的字符有以下两种:
字符串就是一串固定长度的字符连接起来的字符序列,Go 的字符串是由单个字节连接起来。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本,即可支持中文。
清晰完备的预定义基础类型,使得开发跨平台应用时无须过多考虑符号和长度差异。
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 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数,见下表:
内建常量 | 内建类型 | 内建函数 |
---|---|---|
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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。