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的原理是什么?
最佳答案
通常只有函数签名而没有实现意味着实现在别处。通常在单独的程序集文件中。
在这种情况下,您偶然发现了标准库中未在汇编中实现的两种情况之一:unsafe和 builtin .
这些包的 Go 实现仅用于在 godoc 中提供文档。它们的使用在 Go language specification 中定义。正因为如此,它的实现方式在 Go 中是不可能实现的。在不安全的情况下,“ArbitraryType”实际上意味着它接受所有可能的类型。如果没有隐式接口(interface)转换,这通常是不可能做到的。但是这些函数是在需要时由编译器实现的,并且可以忽略对 Go 代码的正常限制。
但是unsafe包是什么?它是一个提供各种工具来进行低级工作的包。它的主要用途是进行直接系统调用或 cgo。使用 unsafe 会给你很大的力量,但也不会阻止你用这种力量搬起石头砸自己的脚。如果可能的话,我建议避免使用它。
进一步阅读:
关于go - 为什么 go package unsafe 源代码只有六行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626773/