基本类型 |
布尔型 bool |
var a bool |
a := true
var b = false |
false |
只能是 true 或 false |
|
整型 int , int8~int64 |
var a int |
a := 100
var b int = -50
ptr := new(int) // 默认为 0 |
0 |
int 的大小依赖平台(32/64位) |
|
无符号整型 uint , uint8~uint64 |
var a uint |
a := uint(255)
var b uint64 = 1000000000 |
0 |
不可为负数 |
|
浮点型 float32 , float64 |
var a float64 |
a := 3.14
var b float32 = 1.23e4 |
0.0 |
推荐使用 float64 (精度更高) |
|
复数型 complex64 , complex128 |
var a complex128 |
a := complex(2, 3)
b := 1 + 2i |
(0+0i) |
表示复数:如 1 + 2i |
|
字符串 string |
var s string |
s := "Hello"
t := 多行字符串\n不会转义`` |
"" |
UTF-8 编码,不可变,反引号保留格式 |
|
字节 byte |
var b byte |
b := byte('A')
c := byte(65) |
0 |
实际是 uint8 的别名 |
|
rune rune |
var r rune |
r := '中'
s := rune(0x4E2D) |
0 |
实际是 int32 的别名,用于 Unicode |
复合类型 |
数组 [n]T |
var arr [3]int |
arr := [3]int{1, 2, 3}
autoArr := [...]int{1, 2, 3} |
各元素零值 |
固定长度,不可扩容 |
|
切片 []T |
var s []int |
s := []int{1, 2, 3}
t := make([]int, 2, 5) |
nil |
动态数组,底层依赖数组 |
|
映射 map[K]V |
var m map[string]int |
m := map[string]int{"age": 25}
n := make(map[string]int) |
nil |
键值对集合,必须先初始化后使用 |
|
结构体 struct |
type User struct { Name string } |
u := User{Name: "Tom"}
v := new(User) // 所有字段为零值 |
各字段零值 |
自定义复合类型,支持嵌套结构 |
|
指针 *T |
var p *int |
i := 10
p := &i
q := new(int) // 指向默认值 0 |
nil |
存储变量地址,可通过 & 获取指针 |
|
函数 func(...) |
var f func(int) bool |
f := func(x int) bool { return x > 0 } |
nil |
一等公民,可作为参数传递 |
|
接口 interface{} |
var i interface{} |
i := "hello"
j := 123
k := func(){} |
nil |
可以保存任意类型,常用于泛型或回调 |
特殊类型 |
空接口 any (Go 1.18+) |
var v any |
v := "abc"
w := 123.45
x := []int{1, 2} |
nil |
即 interface{} ,用于泛型编程 |
|
Channel chan T |
var ch chan int |
ch := make(chan int) |
nil |
并发通信通道,必须用 make(chan T) 创建 |
|
错误类型 error |
var err error |
err := errors.New("出错了")
err2 := fmt.Errorf("错误码:%d", 404) |
nil |
标准错误处理,通常通过 errors.New() 或 fmt.Errorf() 创建 |