Go 中的泛型函数:综合指南
在探索 Go 时,您可能会遇到空接口的概念。它是一个强大的工具,可以容纳任何类型,不需要额外的方法。
考虑这个例子:
func describe(i interface{}) { fmt.Printf("Type: %T | Value: %v\n", i, i) }
当你传递不同的类型来描述时,它会打印出类型和值:
"Type: int | Value: 5" // for i := 5 "Type: string | Value: test" // for i := "test"
那么,这是 Go 实现泛型函数的方式吗?不完全是。从 Go 1.18 开始,您现在可以编写真正的泛型函数。这是一个示例:
package main import ( "fmt" ) // T can be any type func Print[T any](s []T) { for _, v := range s { fmt.Print(v) } } func main() { // Passing list of string works Print([]string{"Hello, ", "world\n"}) // You can pass a list of int to the same function as well Print([]int{1, 2}) }
输出:
Hello, world 12
这个泛型函数 Print 可以处理任何类型的切片,为泛型编程提供更通用和类型安全的方法。
以上是Go 的空接口或 Go 1.18 泛型是泛型函数的真正实现吗?的详细内容。更多信息请关注PHP中文网其他相关文章!