Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melaksanakan Operator Perbandingan Generik dalam Go?

Bagaimanakah Saya Boleh Melaksanakan Operator Perbandingan Generik dalam Go?

Patricia Arquette
Lepaskan: 2024-11-04 02:01:01
asal
359 orang telah melayarinya

How Can I Implement a Generic Comparison Operator in Go?

Apakah yang dipanggil antara muka setanding?

Dalam Go, tiada antara muka pratakrif yang menyediakan pengendali perbandingan generik (<). Sebaliknya, anda boleh menentukan fungsi Kurang anda sendiri untuk membandingkan jenis anda. Fungsi Less mengambil dua argumen daripada jenis yang sama dan mengembalikan boolean yang menunjukkan sama ada argumen pertama adalah kurang daripada yang kedua.

Berikut ialah contoh fungsi Less yang boleh membandingkan integer dan rentetan:

func Less(a, b interface{}) bool {
    switch a.(type) {
    case int:
        if ai, ok := a.(int); ok {
            if bi, ok := b.(int); ok {
                return ai < bi
            }
        }
    case string:
        if ai, ok := a.(string); ok {
            if bi, ok := b.(string); ok {
                return ai < bi
            }
        }
    // ...
    default:
        panic("Unknown")
    }
    return false
}
Salin selepas log masuk

Anda boleh menggunakan fungsi Less untuk memasukkan elemen ke dalam senarai terpaut yang diisih:

func Insert(val interface{}, l *list.List) *list.Element {
    e := l.Front()
    if e == nil {
        return l.PushFront(val)
    }
    for ; e != nil; e = e.Next() {
        if Less(val, e.Value) {
            return l.InsertBefore(val, e)
        }
    }
    return l.PushBack(val)
}
Salin selepas log masuk

Fungsi Sisipan ini akan mengekalkan senarai terpaut dalam susunan tersusun berdasarkan fungsi Less.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Operator Perbandingan Generik dalam Go?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan