Task2 - 数据类型,关键字,标识符
数据类型
基础数据类型
布尔
var b1 bool = true
var b2 bool = false
fmt.Println("b1 =", b1, "b2 =", b2)
运算
- &&
- ||
&& 的优先级大于 ||
整型
-
int8, int16, int32, int64 -> 8,16,32,64bit有符号整数
-
uint8, uint16, uint32, uint64 -> 8, 16, 32, 64 无符号整数
-
int/uint -> 不同平台/编译器可能产生不同大小(32/64)
-
uintptr(无符号整型, 存放一个指针)
Go语言中关于算术运算、逻辑运算和比较运算的二元运算符,它们按照优先级递减的顺序排列:
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
- 同一个优先级左优先结合, 括号明确优先顺序
- 前两行还有 += 这种操作
Go语言还提供了以下的bit位操作运算符,前面4个操作运算符并不区分是有符号还是无符号数:
& 位运算 AND
| 位运算 OR
^ 位运算 XOR
&^ 位清空(AND NOT)
<< 左移
>> 右移
- 表示 Unicode 字符的 rune 类型和 int32 类型是等价的,通常用于表示一个 Unicode 码点,是等价的。
- byte 和 uint8 也是等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数。
- 无符号的整数类型 uintptr,它没有指定具体的 bit 大小但是足以容纳指针。只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
- 有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 -2(n-1) 到 2(n-1)-1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2n-1。
浮点
- float32, float64
- 常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38。
- 常量 math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308。
- float32 和 float64 能表示的最小值分别为 1.4e-45 和 4.9e-324。
- 浮点数在声明的时候可以只写整数部分或者小数部分。
复数
-
complex64, complex128 -> 分别对应float32, float64
-
前半部分是实数, 后半部分是虚数
-
如果一个浮点数面值或一个十进制整数面值后面跟着一个i,例如3.141592i或2i,它将构成一个复数的虚部,复数的实部是0
-
复数也可以用==和!=进行相等比较。只有两个复数的实部和虚部都相等的时候它们才是相等的(译注:浮点数的相等比较是危险的,需要特别小心处理精度问题)。 -> 那就是eps呗
字符串
- 一个字符串是一个不可改变的字节序列。(不能s[i] = "i"赋值)
- Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本
- 故, 第i个字节并不一定是字符串的第i个字符,因为对于非ASCII字符的UTF8编码会要两个或多个字节。
派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel 类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
关键字
- 语言设计者保留的有特定于法含义的标识符
- 有自己的用途和语法含义
- 一般用来控制程序结构
关键字 / 保留字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
- 引导程序结构的8个关键词
- package -> 定义包
- import -> 导包
- const -> 常量声明
- var -> 变量声明
- func -> 函数声明
- defer -> 延迟执行
- go -> 语法糖
- return -> 函数返回
- 声明复合数据结构
- struct -> 定义结构类型
- interface -> 接口类型
- map -> map类型
- chan -> 通道类型
- 程序结构流程
- if else -> 条件
- for range break continue -> 循环
- switch select type default fallthrough -> switch, select
标识符
-
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~ Z和a~ z)数字(0~9)、下划线“_”组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
-
下划
_
是一个特殊的标识符,称为空白标识符,它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用_
作为变量对其它变量进行赋值或运算。 -
在使用标识符之前必须进行声明,声明一个标识符就是将这个标识符与常量、类型、变量、函数或者代码包绑定在一起。在同一个代码块内标识符的名称不能重复。
遵守规则:
- 由 26 个英文字母、0~9、
_
组成 - 不能以数字开头,例如 var 1num int 是错误的
- Go语言中严格区分大小写
- 标识符不能包含空格
- 不能以系统保留关键字作为标识符
预定义标识符
内建常量: true false iota nil内建类型: int int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptrfloat32 float64 complex128 complex64bool byte rune string error内建函数: make len cap new append copy close deletecomplex real imagpanic recover
- 程序一般由关键字、常量、变量、运算符、类型和函数组成。
- 程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
- 程序中可能会使用到这些标点符号:.、,、;、: 和 …。