首頁 >後端開發 >Golang >Go 的空介面或 Go 1.18 泛型是泛型函數的真正實作嗎?

Go 的空介面或 Go 1.18 泛型是泛型函數的真正實作嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-29 04:36:10326瀏覽

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