Go 数据类型 #
基础数据类型 Pre-declarered types #
布尔型 #
数字类型 #
uint8 | ||
uint16 | ||
uint32 | 0 到 4294967295 (42 亿) | |
uint64 | ||
int8 | 有符号 8 位整型 | -128 到 127 |
int16 | 有符号 16 位整型 | -32768 到 32767 |
int32 | -2147483648 到 2147483647 | |
int64 | ||
float32 | IEEE-754 32 位浮点型数 | |
float64 | IEEE-754 64 位浮点型数 | |
complex64 | 32 位实数和虚数 | |
complex128 | 64 位实数和虚数 | |
byte | 类似 uint8 | |
rune | 类似 int32 | |
uint | 32 或 64 位 | |
int | 与 uint 一样大小 | |
uintptr | 无符号整型,用于存放一个指针 |
uint 不能直接相减 #
结果是负数会变成一个很大的 uint
,这点对动态语言出身的可能有坑
字符串类型 #
派生类型 Composite Types #
指针类型(Pointer) #
数组类型 #
结构化类型 (struct) #
go struct 能不能比较?
- 因为是强类型语言,所以不同类型的结构不能作比较,
- 但是同一类型的实例值是可以比较的,
- 实例不可以比较,因为是指针类型。
Channel 类型 #
函数类型 #
切片类型 #
如果你要创建一个很长的 slice,尽量创建成一个 slice 里存引用,这样可以分批释放,避免 gc 在低配机器上 stop the world
从 slice 创建 slice 的时候,注意原 slice 的操作可能导致底层数组变化
JSON 标准库对 nil slice 和 空 slice 的处理是一致的吗?
多维 slice #
Slice 可以组成多维数据结构。
内部的 slice 长度可以不一致,这一点和多维数组不同。
接口类型(interface) #
Map 类型 #
m := make(map[string]string)
类型转化 #
Atoi #
// string 到 int
int, err := strconv.Atoi(string)
// string 到 int64
int64, err := strconv.ParseInt(string, 10, 64)
// int 到 string
string := strconv.Itoa(int)
// int64 到 string
string := strconv.FormatInt(int64, 10)
其他 #
Redundant type declaration
#
Composite literals = LiteralType LiteralValue
当使用 map composite literal,由于 types of key and value 已经知道了,所以没必要再写 type
// Redundant type declaration
var Foo = map[string]struct{}{
"foo": struct{}{},
}
// 正常
var Foo = map[string]struct{}{
"foo": {},
}
参考:
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。