首页 >后端开发 >Golang >Go 的空接口或 Go 1.18 泛型是泛型函数的真正实现吗?

Go 的空接口或 Go 1.18 泛型是泛型函数的真正实现吗?

Patricia Arquette
Patricia Arquette原创
2024-12-29 04:36:10324浏览

Are Go's Empty Interfaces or Go 1.18 Generics the True Implementation of Generic Functions?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn