Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menggunakan Operator Pesanan dengan Selamat (<, >, <=, >=) dengan Go Generics?

Bagaimanakah Saya Boleh Menggunakan Operator Pesanan dengan Selamat (<, >, <=, >=) dengan Go Generics?

DDD
DDDasal
2024-12-11 13:27:18240semak imbas

How Can I Safely Use Order Operators (<, >, <=, >=) dengan Go Generics?
, =) dengan Go Generics? " />

Go Generik: Operator Pesanan dengan Kekangan Setanding

Dalam Go 1.18, generik membenarkan kekangan yang disesuaikan untuk menguatkuasakan keserasian jenis. Walau bagaimanapun, apabila cuba menggunakan '>' pengendali dengan kekangan 'sebanding', ralat mungkin timbul.

Kekangan 'sebanding'

Kekangan 'sebanding' mengesahkan bahawa sesuatu jenis menyokong pengendali kesaksamaan ('==' dan '!= '). Ia merangkumi jenis yang layak sebagai kunci peta, termasuk tatasusunan dan struct dengan medan yang setanding dikecualikan kerana ia boleh menyebabkan panik masa jalan semasa perbandingan.

Dipesan lwn. Sebanding

Walaupun spesifikasi Go menyebut pengendali pesanan di bawah istilah "pengendali perbandingan", mereka membezakan antara kesetaraan ('==' dan '!=') dan operator pesanan ('<', '>', '<=', '>='). Pesanan terhad kepada jenis yang 'dipesan.'

Versi dan Penyelesaian Go

Go 1.21

  • Perkenalkan 'cmp.Ordered' daripada standard perpustakaan.

Pergi 1.18 hingga 1.20

  • Gunakan 'constraints.Ordered' daripada pakej eksperimen 'golang.org/x/exp'. Kekangan ini menyokong pengendali pesanan dan termasuk integer, apungan dan rentetan.

Contoh:

import "golang.org/x/exp/constraints"

func getBiggerNumber[T constraints.Ordered](t1, t2 T) T {
    if t1 > t2 {
        return t1
    }
    return t2
}

Dengan memilih kekangan yang sesuai, anda memastikan keserasian jenis dan tingkah laku perbandingan yang betul dalam fungsi generik anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Operator Pesanan dengan Selamat (<, >, <=, >=) dengan Go Generics?. 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