Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Go Generik Mengendalikan Kesatuan dan Hadnya dalam Kekangan Jenis dan Bekas?

Bagaimanakah Go Generik Mengendalikan Kesatuan dan Hadnya dalam Kekangan Jenis dan Bekas?

DDD
Lepaskan: 2024-12-26 21:51:14
asal
498 orang telah melayarinya

How Do Go Generics Handle Unions and Their Limitations in Type Constraints and Containers?

Go Generics - Kesatuan dan Hadnya

Dalam Go, kesatuan mempunyai dua tujuan utama:

  1. Menentukan set jenis dalam kekangan antara muka: Kesatuan membenarkan anda mengehadkan parameter jenis generik kepada set tertentu jenis.
  2. Termasuk elemen anggaran: Menggunakan simbol ~ dalam kesatuan menunjukkan bahawa jenis serasi lain mungkin disertakan.

Walau bagaimanapun, ia adalah penting untuk ambil perhatian bahawa kesatuan hanya boleh digunakan dalam kekangan antara muka. Cuba untuk menggunakannya sebagai jenis biasa, seperti dalam tt := []testDifference[intOrString], tidak disokong.

Selain itu, bekas generik, seperti hirisan, tidak boleh memuatkan item daripada jenis yang berbeza. Walaupun kepingan ujian anda termasuk kedua-dua testDifference[int ] dan testDifference[rentetan], instantiasi konkrit ini adalah jenis yang berbeza.

Untuk menyelesaikannya, anda boleh sama ada menggunakan kepingan berasingan untuk setiap jenis (ttInts dan ttStrs) atau simpan semua item sebagai antara muka ([]antara muka{}).

Operasi pada kekangan kesatuan terhad kepada yang disokong oleh semua jenis dalam set jenis. Dalam kes int | rentetan, ini termasuk pengisytiharan pembolehubah, penukaran, perbandingan, pesanan dan pengendali.

Contoh:

type intOrString interface {
    int | string
}

func beforeIntOrString[T intOrString](a, b T) bool {
    return a < b
}

func sumIntOrString[T intOrString](a, b T) T {
    return a + b
}

func main() {
    fmt.Println(beforeIntOrString("foo", "bar")) // false
    fmt.Println(beforeIntOrString(4, 5)) // true

    fmt.Println(sumIntOrString("foo", "bar")) // foobar
    fmt.Println(sumIntOrString(10, 5)) // 15
}
Salin selepas log masuk

Dalam contoh ini, beforeSendIntOrString dan sumIntOrString ialah fungsi generik yang berfungsi dengan nilai int dan rentetan, masing-masing.

Atas ialah kandungan terperinci Bagaimanakah Go Generik Mengendalikan Kesatuan dan Hadnya dalam Kekangan Jenis dan Bekas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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