【问题标题】:Do Go built-ins use generics?Go 内置函数是否使用泛型?
【发布时间】:2017-06-16 02:35:46
【问题描述】:

查看 Go 的内置函数,我才意识到他们不使用接口,而是使用了一个神奇的“类型”。

https://golang.org/src/builtin/builtin.go

那么,如果不使用泛型,这到底是怎么可能的呢?如果没有接口,我将如何编写一个签名类似于 append 的函数(它采用任何类型的数组)?

【问题讨论】:

  • "内置包为 Go 的预声明标识符提供文档。此处记录的项目实际上并不在内置包中,但它们的描述允许 godoc 为该语言的特殊标识符提供文档。"
  • 这是一个不错的尝试,但 Go 真的,真的没有泛型。内置函数是由编译器而不是 stdlib 内置和处理的,并且不限于 Go 语言本身可用的功能。

标签: generics gcc go built-in


【解决方案1】:

您无法创建此类函数。具有这种通用的、神奇的“基因”的函数是 language specification 涵盖的内置函数,列于 Predeclared identifiers 部分。

引用Effective Go: Append:

append[...] 的签名示意,是这样的:

func append(slice []T, elements ...T) []T

其中T 是任何给定类型的占位符。 您实际上不能在 Go 中编写类型 T 由调用者确定的函数。这就是内置append 的原因:它需要编译器的支持。

查看相关问题:

Go functions accessed through variables

Return map like 'ok' in Golang on normal functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多