Go generik membenarkan penggunaan parameter jenis untuk mengoptimumkan pemprosesan berbilang jenis data dan melaksanakan parameterisasi jenis Contohnya, fungsi Find[T any] boleh mengendalikan hirisan elemen apa-apa jenis. Dengan fungsi isihan tersuai Sort[T any], anda boleh mengisih unsur apa-apa jenis berdasarkan nilainya tanpa perlu menulis berbilang fungsi isihan untuk jenis tertentu. Fungsi ini menerima sebagai parameter parameter jenis T dan fungsi kurang yang menentukan susunan antara elemen. . Bekerja dengan berbilang jenis data selalunya merupakan senario biasa dalam pengaturcaraan, dan Go generik memberi peluang untuk mengoptimumkan operasi sedemikian.
Pemeteran jenis
Go generik membolehkan anda menentukan fungsi atau jenis dengan parameter jenis. Parameter ini boleh digunakan sebagai parameter fungsi atau sebagai jenis nilai pulangan. Sebagai contoh, fungsi berikut mempunyai parameter jenis T
, menunjukkan bahawa ia boleh mengendalikan hirisan unsur dari sebarang jenis:
func Find[T any](slice []T, target T) int { for i, v := range slice { if v == target { return i } } return -1 }
Amalan: Pengisihan tersuai
Mari kita lihat kes praktikal yang menggambarkan bagaimana untuk menggunakan jenis Go pan untuk mengoptimumkan algoritma pengisihan tersuai. Katakan kita mempunyai kepingan yang mengandungi unsur-unsur jenis yang berbeza (sepertiint
, float64
dan string
) dan kami mahu memasangkan Isihnya. Dengan kod Go tradisional, kita perlu menulis berbilang fungsi pengisihan, setiap satu dioptimumkan untuk jenis tertentu. Menggunakan generik Go, kita boleh mencipta fungsi pengisihan umum yang boleh mengendalikan unsur dari sebarang jenis: func Sort[T any](slice []T, less func(i, j T) bool) { for i := 1; i < len(slice); i++ { for j := 0; j < i; j++ { if less(slice[i], slice[j]) { slice[i], slice[j] = slice[j], slice[i] } } } } func main() { intSlice := []int{1, 5, 2, 7, 8, 3} floatSlice := []float64{3.14, 1.6, 2.7, 4.5, 0.9} stringSlice := []string{"a", "c", "b", "d", "e"} Sort(intSlice, func(i, j int) bool { return i < j }) fmt.Println(intSlice) Sort(floatSlice, func(i, j float64) bool { return i < j }) fmt.Println(floatSlice) Sort(stringSlice, func(i, j string) bool { return i < j }) fmt.Println(stringSlice) }
Sort()
mengambil parameter jenis T , dan juga menerima fungsi <code>less
sebagai hujah, yang menentukan susunan antara elemen. Fungsi ini boleh disesuaikan untuk sebarang jenis, membolehkan ia diisih dengan cara yang serba boleh dan boleh digunakan semula. Atas ialah kandungan terperinci Optimumkan generik bahasa Go untuk mengendalikan berbilang jenis data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!