Definisi dan aplikasi generik Golang

王林
Lepaskan: 2024-04-04 10:18:02
asal
1009 orang telah melayarinya

Generik telah diperkenalkan dalam Go 1.18 untuk mencipta kod bebas jenis. Generik menggunakan kurungan segi empat sama [] untuk mentakrifkan parameter jenis, seperti func Sort[T any](arr []T). Pengkompil Go boleh membuat kesimpulan parameter jenis seperti fungsi Swap[T](x, y T). Generik boleh digunakan untuk membina struktur data, seperti pepohon carian binari jenis Node[T any] struct { … }, dan mengenakan kekangan jenis, seperti jenis Node[T comparable] struct { … }. Go generik meningkatkan fleksibiliti kod tanpa membuat jenis baharu.

Definisi dan aplikasi generik Golang

Takrifan dan aplikasi Go generik

Dalam Go 1.18, bahasa Go memperkenalkan ciri yang sangat dinantikan: Generik. Generik membolehkan anda mencipta struktur data dan algoritma yang bebas daripada jenis tertentu, menjadikan kod anda lebih boleh digunakan semula dan fleksibel.

Takrifkan generik

Generik ditakrifkan menggunakan kurungan segi empat sama [], yang mengandungi sebarang bilangan parameter jenis: [] 来定义,其中包含任意数量的类型参数:

func Sort[T any](arr []T)
Salin selepas log masuk

在上面的示例中,T 是类型参数,代表可以是任何类型的项。

类型推断

如果函数的泛型类型参数可以在上下文中推断出来,则可以省略它们:

func Swap[T](x, y T)
Salin selepas log masuk

此函数可以与任何类型的两个参数一起使用,Go 编译器会推断出 T 应该是 xy 的类型。

实战案例:二叉查找树

让我们创建一个二叉查找树的泛型版本:

type Node[T any] struct {
    Value    T
    Left     *Node[T]
    Right    *Node[T]
}

func Insert[T comparable](n *Node[T], value T) *Node[T] {
    // ...
}

func Search[T comparable](n *Node[T], value T) *Node[T] {
    // ...
}
Salin selepas log masuk

这个二叉查找树允许我们存储和搜索任何可比较类型的元素。

类型约束

有时,您需要对类型参数施加约束。例如,为了确保在二叉查找树中比较两个值是有效的,我们可以要求 T 实现了 comparable

type Node[T comparable] struct {
    // ...
}
Salin selepas log masuk
Dalam contoh di atas, T ialah Jenis parameter mewakili barang dari sebarang jenis.

Inferens Jenis
  • Parameter jenis generik fungsi boleh diketepikan jika ia boleh disimpulkan daripada konteks:
  • rrreee
  • Fungsi ini boleh digunakan dengan dua parameter dari sebarang jenis, pengkompil Go akan membuat kesimpulan T hendaklah daripada jenis x dan y.
  • Contoh Praktikal: Pokok Carian Binari
Mari kita cipta versi generik pepohon carian binari:

rrreee

Pokok carian binari ini membolehkan kita menyimpan dan mencari elemen dari sebarang jenis yang setanding.

Kekangan Jenis🎜🎜Kadangkala, anda perlu mengenakan kekangan pada parameter jenis. Sebagai contoh, untuk memastikan bahawa membandingkan dua nilai dalam pepohon carian binari adalah sah, kami boleh menghendaki T melaksanakan antara muka comparable: 🎜rrreee🎜Notes🎜🎜🎜 Go Generics in bukan jenis templat, ia tidak mencipta jenis baharu. 🎜🎜Parameter jenis generik tidak boleh dibuat seketika. 🎜🎜Taip inferens hanya terpakai apabila memanggil fungsi, bukan semasa mengisytiharkannya. 🎜🎜🎜Kesimpulan🎜🎜Go generik membawa ciri baharu yang berkuasa kepada bahasa Go. Memahami cara mentakrif dan menggunakan generik adalah kunci untuk menjadikan kod anda lebih fleksibel dan boleh digunakan semula. 🎜

Atas ialah kandungan terperinci Definisi dan aplikasi generik Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!