为什么包装不安全的源代码只有六行?

时间:2017-10-08 01:41:34

标签: go

package unsafe
type ArbitraryType int
type Pointer *ArbitraryType
func Sizeof(x ArbitraryType) uintptr
func Offsetof(x ArbitraryType) uintptr
func Alignof(x ArbitraryType) uintptr

Sizeof,Offsetof,Alignof的原理是什么?

1 个答案:

答案 0 :(得分:1)

通常只有一个没有实现的函数签名意味着实现在其他地方。通常在单独的程序集文件中。

在这种情况下,您偶然发现标准库中的两种情况之一,它在汇编中未实现:unsafebuiltin

这些包的Go实现仅用于提供godoc内的文档。它们的使用在Go language specification中定义,因此以在Go中无法实现的方式实现。在不安全的情况下," ArbitraryType"真的意味着它接受所有可能的类型。如果没有隐式接口转换,这通常是不可能的。但是这些函数是由编译器在需要时实现的,并且忽略了对Go代码的正常限制。

但是什么是不安全的包裹?它是一个包,提供各种工具,用于执行低级别的工作。它的主要用途是直接进行系统调用或cgo。使用不安全会给你带来很大的力量,但也不能阻止你使用这种力量射击自己的脚。如果可能的话,我建议避免它。

进一步阅读: