...

Package unsafe

import "unsafe"
概览
索引

概览 ▾

unsafe 包含有关于Go程序类型安全的所有操作.

func Alignof

func Alignof(x ArbitraryType) uintptr

Alignof 接受一个任意类型的表达式 x 并返回假定的变量 v 的对齐,这里的 v 可看做通过 var v = x 声明的变量。它是最大值 m 使其满足 v 的地址取模 m 为零。 TODO(osc): 需优化语句

func Offsetof

func Offsetof(x ArbitraryType) uintptr

Offsetof 返回 x 所代表的结构体中字段的偏移量,它必须为 structValue.field 的形式。 换言之,它返回该结构体起始处与该字段起始处之间的字节数。

func Sizeof

func Sizeof(x ArbitraryType) uintptr

Sizeof 接受一个任意类型的表达式 x 并返回假定的变量 v 的字节大小,这里的 v 可看做通过 var v = x 声明的变量。该大小并不包括 x 可能引用的任何内存。例如,若 x 是一个切片, Sizeof 会返回该切片描述符所示的大小,而非该切片引用的内存大小。

type ArbitraryType

type ArbitraryType int

ArbitraryType 在此处只用作文档目的,它实际上并不是 unsafe 包的一部分。 它代表任意一个Go表达式的类型。

type Pointer

type Pointer *ArbitraryType

Pointer 代表一个指向任意类型的指针。 有三种特殊的操作可用于类型指针而不能用于其它类型。

1) 任意类型的指针值均可转换为 Pointer。
2) Pointer 均可转换为任意类型的指针值。
3) uintptr 均可转换为 Pointer。
4) Pointer 均可转换为 uintptr。

因此 Pointer 允许程序击溃类型系统并读写任意内存。它应当被用得非常小心。