1.1.1 数据类型

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": {},
}

参考:


本文访问量

本站总访问量

本站总访客数