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

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

Patricia Arquette
發布: 2024-12-29 04:36:10
原創
322 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板