Go语言基础三:基本数据类型和运算符
Go语言数据类型
与其他编程语言一样,Go语言提供了各种数据类型,可分为基本的数据类型和复杂的数据类型。基本的数据类型就是基本的构造块,例如字符串、数字和布尔值。复杂的数据类型是用户自己定义的结构,由一种或者多种基本的数据类型组成。
基本的数据类型
基本的数据类型包括 bool、strin、int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr、byte、rune、float32、float64、complex64、complex128
。
整型
类型名 | 字节数 |
---|---|
int8 | 有符号 8 位整型 (-128 ~ 127) |
int16 | 有符号 16 位整型 (-32768 ~ 32768) |
int32 | 有符号 32 位整型 (-2147483648 ~ 2147483647) |
int64 | 有符号 64 位整型 (-9223372036854775808 ~9223372036854775807) |
uint8 | 无符号 8 位整型 (0 ~ 255) |
uint16 | 无符号 16 位整型 (0 ~ 65535) |
uint32 | 无符号 32 位整型 (0 ~4294967295) |
uint64 | 无符号 64 位整型 (0 ~ 18446744073709551615) |
rune
类型是Unicode字符类型,和int32
类型等价,通常用于表示一个Unicode码点,rune
可以和int32
可以互换。
byte
是unit8
类型的等价类型,byte
一般用于强调数值是个原始的数据,而不是一个小的整数。
uinptr
是一种无符号的整数类型,用于存放指针,没有指定具体的字节大小,但是足以容纳指针。
uinptr
类型只有在底层编程才需要,特别是Go语言和C语言函数库或操作系统接口交互的地方。
浮点数
Go语言提供了两种精度的浮点数:float32、float64
这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的取值范围极限值可以在math
包中找到。math.MaxFloat32、mathMaxFloat64
分别表示两种浮点数类型的取值范围。
类型名 | 字节数 |
---|---|
float32 | IEEE-754 32位浮点型数 |
float64 | IEEE-754 64位浮点型数 |
复数
Go语言提供了两种精度的复数类型:complex64、complex128
,分别对应float32、float64
两种浮点数类型。
直白地说:complex64 = float32实部+虚部、complex128 = float64实部+虚部
内置函数complex
用于构建复数,内置函数real、imag
函数分别返回复数的实部和虚部。
类型名 | 字节数 |
---|---|
complex64 | 32 位实数和虚数 |
complex64 | 64 位实数和虚数 |
布尔型
一个布尔型的值只有两种:true、false
。当声明一个布尔型变量但没有赋值时,默认值为false
。
布尔值并不会隐式转换为数字值0或1,如果想实现转换,必须由一个if语句辅助转换。
字符串
子字符串
子字符串:操作s[i:j]
基于对原始字符串s
的第i
个字节开始到第j
个字节(并不包含j本身,并且从0开始)生成一个新的字符串。
无论i
或者j
都可以被省略不写,当i
被省略时,代表从0开始;当j
被省略时,代表至最后一位结束。例如:
package main
import "fmt"
func main(){
var s string = "0123456"
s_1, s_2, s_3 := s[0:6], s[:6], s[0:]
fmt.Println(s_1)
fmt.Println(s_2)
fmt.Println(s_3)
}
输出结果如下
012345 //不包含第6位
012345 //省略i则代表从0开始
0123456 //省略j则代表至最后一位结束
字符串内符号含义
符号 | 含义 |
---|---|
\a | 响铃 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\v | 垂直制表符 |
' | 单引号 (只用在 ''' 形式的rune符号面值中) |
" | 双引号 (只用在 "..." 形式的字符串面值中) |
\ | 反斜杠 |
Go语言的运算符
Go语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
运算符优先级表
对于相同优先级的运算符的运算方向均为从左至右。你也可以通过括号来提升运算符的优先级。
由上至下优先级由高至低
优先级 | 运算符 |
---|---|
1 | * / % << >> & &^ |
2 | + - | ^ |
3 | == != < <= > >= |
4 | && |
5 | || |
运算符表
运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
++ (只有a++没有++a) | 自增 |
-- (只有a--没有--a) | 自减 |
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 |
! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 |
& | 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 |
| | 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 |
^ | 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 |
<< | 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
>> | 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 |
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
^= | 按位异或后赋值 |
|= | 按位或后赋值 |
& | 返回变量存储地址 |
* | 指针变量。 |