数据类型
我们经常看到这样的变量声明:
var (
a int
b string
c float32
)
在Go中所有变量都是有类型的, 比如前面的int, string, float32 这些, 因此在接下来我们将先讲解下Go的基础类型
go在语言成面定义了如下几种基础类型:
- 整形 12345
- 浮点型 123.45
- 复数 123.45i
- 字符 ‘a’
- 字符串 “abc”
- 布尔类型 true, false
- 枚举类型 iota
- 自定义类型
整形
类型名 | 字节宽度 | 取值范围 |
---|---|---|
int | 与平台有关 | 32 位系统 4 字节,64 位系统 8 字节 有符号整型 |
uint | 与平台有关 | 32 位 系统 4 字节,64 位 系统 8 字节 无符号整形 |
int8 | 1 字节 | 用 8 位表示的有符号整型 取值范围为:[-128, 127] |
int16 | 2 字节 | 用 16 位表示的有符号整型 取值范围为:[-32768,32767] |
int32 | 4 字节 | 用 32 位表示的有符号整型,取值范围为:[-2147483648,2147483647] |
int64 | 8 字节 | 用 64 位表示的有符号整型,取值范围为:[-9223372036854775808,9223372036854775807] |
uint8 | 1 字节 | 用 8 位表示的无符号整型,取值范围为:[0,255] |
uint16 | 2 字节 | 用 16 位表示的无符号整型,取值范围为:[0,65535] |
uint32 | 4 字节 | 用 32 位表示的无符号整型,取值范围为:[0,4294967295] |
uint64 | 8 字节 | 用 64 位表示的无符号整型,取值范围为:[0,18446744073709551615] |
uintptr | 与平台有关 | 32 位系统 4 字节,64 位系统 8 字节指针值的无符号整型 |
浮点型
类型名 | 字节宽度 | 取值范围 |
---|---|---|
float32 | 4字节 | IEEE-754 32位浮点型数 |
float64 | 8字节 | IEEE-754 64位浮点型数 |
complex64 | 4字节 | 32 位实数和虚数 |
complex128 | 8字节 | 64 位实数和虚数 |
别名
类型名 | 字节宽度 | 取值范围 |
---|---|---|
byte | 1 字节 | 字节类型,取值范围同 uint8 |
rune | 4 字节 | Unicode 码点 取值范围同 uint32 |
字符串类型
Go 语言内置了字符串类型,使用 string 表示
字面量:
- 可解析字符串:通过双引号(“)来创建,不能包含多行,支持特殊字符转义序列
- 原生字符串:通过反引号(`)来创建,可包含多行,不支持特殊字符转义序列
特殊字符:
- \:反斜线
- ‘:单引号
- “:双引号
- \a:响铃
- \b:退格
- \f:换页
- \n:换行
- \r:回车
- \t:制表符
- \v:垂直制表符
- \ooo:3 个 8 位数字给定的八进制码点的 Unicode 字符(不能超过\377
- \uhhhh:4 个 16 位数字给定的十六进制码点的 Unicode 字符
- \Uhhhhhhhh:8 个 32 位数字给定的十六进制码点的 Unicode 字符
- \xhh:2 个 8 位数字给定的十六进制码点的 Unicode 字符
布尔类型
布尔类型用于表示真假,类型名为 bool,只有两个值 true 和 false,占用一个字节宽度,零值为 false
var (
IsBoy bool = true
IsGirl bool = true
)
枚举类型
常使用 iota 生成器用于初始化一系列相同规则的常量,批量声明常量的第一个常量使用
iota 进行赋值,此时 iota 被重置为 0,其他常量省略类型和赋值,在每初始化一个常量则
加 1
import (
"fmt"
)
const (
a = iota
b
c
d
)
func main() {
var
fmt.Println(a, b, c, d)
}
自定义类型
在 go 语言中使用 type 声明一种新的类型,语法格式为: type TypeName Formatter
比如我们可以定义自己
type Gender string