go - 为什么 go package unsafe 源代码只有六行?

标签 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的原理是什么?

最佳答案

通常只有函数签名而没有实现意味着实现在别处。通常在单独的程序集文件中。

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

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


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


进一步阅读:

关于go - 为什么 go package unsafe 源代码只有六行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626773/

相关文章:

go - 在golang中使用带有字符串的多个定界符。

go - 是否有 API 可以从阅读器读取一行,但限制返回行的长度?

go - Golang 的 LDAP 客户端库如何使用证书?

go - 看懂这段代码(golang),双括号()()

戈朗 : grpc call timeout

go - 专门检查超时错误

go - 使用两个字节字符查找文件

go - 从 go 获取 Windows 全名的最佳方法是什么?

sql - 将非结构化 JSON BYTEA 扫描到 map[string]string

rest - 如何在 Go 中编写通用处理程序?