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

Bagaimanakah Saya Boleh Melaksanakan Operator Perbandingan Generik dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 02:01:01266semak imbas

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
}

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)
}

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!

Kenyataan:
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