Rumah > Artikel > pembangunan bahagian belakang > Perbincangan mendalam tentang pelbagai jenis generik dalam bahasa Go
Generik bahasa Go memperkenalkan ciri jenis yang berbeza, termasuk: Parameter jenis: Benarkan fungsi atau jenis mewakili jenis arbitrari dan dijadikan instantiated dengan jenis tertentu. Kekangan jenis: Hadkan syarat yang mesti dipenuhi oleh parameter jenis. Jenis inferens: Pengkompil boleh membuat kesimpulan parameter jenis daripada konteks. Struktur dan antara muka generik: Generik boleh digunakan untuk menentukan struktur dan antara muka. Jenis tuple: Parameter jenis mewakili koleksi jenis yang dipesan.
Teroka secara mendalam pelbagai jenis ciri generik bahasa Go
Pengenalan
Go versi 1.18 memperkenalkan ciri generik, membawa kemungkinan baharu kepada bahasa. Generik membolehkan kami mencipta kod boleh guna semula dalam sistem ditaip, menjadikan kod lebih cekap dan fleksibel. Artikel ini akan menyelidiki peranan dan penggunaan atribut jenis yang berbeza dalam generik bahasa Go.
Ciri jenis asas
func[T any](x T)
mewakili fungsi yang boleh menerima sebarang jenis parameter input dan mengembalikan jenis hasil output yang sama. func[T any](x T)
表示一个函数,它可以接受任意类型的输入参数并返回相同类型的输出结果。func[T any](x T) where T interface{ Len() int }
表示一个函数,它接受实现了 Len()
方法的任何类型的输入参数。func[T any](x T)
泛型函数可以实例化为 func(int)
或 func(string)
。高级类型特性
func[T any](x T)
可以被调用为 func(int)
, 编译器会自动推断类型参数为 int
。type Stack[T any]
定义了一个使用类型参数 T
作为元素类型的泛型栈结构体。type Pair[T1 any, T2 any]
Parameter jenis boleh dihadkan oleh kekangan jenis. Kekangan jenis menentukan syarat yang mesti dipenuhi oleh parameter jenis Contohnya, func[T any](x T) dengan antara muka T{ Len() int }
mewakili fungsi yang menerima fungsi yang melaksanakan func(int)
atau func(string)
.
Ciri Jenis Terperinci
🎜🎜Inferens Jenis: 🎜Go generik bahasa menyokong jenis inferens, di mana pengkompil boleh membuat kesimpulan parameter jenis daripada konteks panggilan fungsi atau taip. Contohnya,func[T any](x T)
boleh dipanggil sebagai func(int)
dan pengkompil secara automatik akan membuat kesimpulan jenis parameter sebagai int . 🎜🎜🎜Struktur dan antara muka generik: 🎜Jenis generik bukan sahaja sesuai untuk fungsi, tetapi juga untuk struktur dan antara muka. Contohnya, <code>type Stack[T any]
mentakrifkan struktur tindanan generik menggunakan parameter jenis T
sebagai jenis elemen. 🎜🎜🎜Tuple jenis: 🎜Tuple jenis sokongan generik bahasa Go, membenarkan parameter jenis mewakili koleksi jenis yang tersusun. Contohnya, type Pair[T1 any, T2 any]
mentakrifkan tuple jenis, mewakili pasangan nilai kunci yang mengandungi dua jenis. 🎜🎜🎜🎜Satu kes praktikal🎜🎜🎜Berikut ialah contoh kod yang menggunakan generik untuk melaksanakan struktur data tindanan: 🎜package main import "fmt" type Stack[T any] struct { data []T } func (s *Stack[T]) Push(x T) { s.data = append(s.data, x) } func (s *Stack[T]) Pop() T { var x T if len(s.data) > 0 { x = s.data[len(s.data)-1] s.data = s.data[:len(s.data)-1] } return x } func main() { // 实例化栈结构体,使用 int 类型 stack := &Stack[int]{} stack.Push(1) stack.Push(2) fmt.Println(stack.Pop()) // 输出:2 fmt.Println(stack.Pop()) // 输出:1 }🎜🎜Kesimpulan🎜🎜🎜Go generik bahasa membawa kefleksibelan, kod kebolehgunaan semula yang sesuai, untuk semua jenis. Dengan memahami ciri jenis yang berbeza, pembangun boleh menggunakan generik untuk meningkatkan kualiti dan kecekapan kod. 🎜
Atas ialah kandungan terperinci Perbincangan mendalam tentang pelbagai jenis generik dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!