Go Academy · Pelajaran

Kekangan: comparable dan Antara Muka

Kekangan kesatuan dan terbina dalam comparable

Pelajaran 2 daripada 413 langkah

Kekangan: comparable dan Antara Muka ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah kekangan?

Kekangan mengehadkan jenis yang boleh digunakan sebagai argumen jenis. Tanpa kekangan, parameter jenis ialah any (antara muka kosong — hanya menyokong penugasan dan perbandingan melalui ==).

Kekangan any

any (alias untuk interface{}) ialah kekangan yang paling luas — semua jenis memenuhinya. Anda hanya boleh menggunakan operasi yang disokong oleh semua jenis: penugasan dan penghantaran kepada parameter antara muka.

func Print[T any](v T) { fmt.Println(v) }

Kekangan comparable

comparable mengehadkan parameter jenis kepada jenis yang menyokong == dan !=. Kekangan ini diperlukan untuk menggunakan jenis tersebut sebagai kunci peta atau dalam pemeriksaan kesamaan.

func Contains[T comparable](s []T, v T) bool {
    for _, item := range s {
        if item == v { return true }
    }
    return false
}

Kekangan antara muka

Gunakan antara muka sebagai kekangan untuk memerlukan kaedah tertentu. Parameter jenis mesti mempunyai semua kaedah antara muka tersebut.

type Stringer interface { String() string }

func Print[T Stringer](v T) {
    fmt.Println(v.String())
}

Kekangan kesatuan

Gunakan kesatuan jenis dengan | untuk mengehadkan kepada sekumpulan jenis konkrit. Ini membolehkan penggunaan operator (seperti +) yang bukan sebahagian daripada mana-mana antara muka.

type Number interface {
    int | int64 | float64
}

func Sum[T Number](s []T) T {
    var total T
    for _, v := range s { total += v }
    return total
}

~T untuk jenis asas

Gunakan ~T untuk memasukkan bukan sahaja T, tetapi semua jenis yang mempunyai T sebagai jenis asas (contohnya, jenis tersuai yang ditakrifkan sebagai type MyInt int).

type Integer interface { ~int | ~int64 }

type MyInt int
// MyInt satisfies Integer because its underlying type is int

golang.org/x/exp/constraints

Pakej constraints menyediakan antara muka kekangan umum: Ordered (menyokong <), Integer, Float, Signed, Unsigned.

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

func Min[T constraints.Ordered](a, b T) T {
    if a < b { return a }
    return b
}

Pakej cmp (Go 1.21)

Go 1.21 menambahkan kekangan cmp.Ordered serta fungsi cmp.Compare/cmp.Less dalam pustaka standard, lalu menggantikan kebergantungan pada exp/constraints.

import "cmp"
func Min[T cmp.Ordered](a, b T) T { return min(a, b) }

Menggabungkan kekangan

Benamkan beberapa antara muka dalam satu kekangan untuk mewajibkan beberapa ciri:

type Printable interface {
    comparable
    fmt.Stringer
}

Pemerolehan kekangan

Pengkompil membuat kesimpulan tentang parameter jenis berdasarkan argumen. Jika kekangan terlalu luas (any), argumen jenis yang jelas mungkin diperlukan untuk membimbing proses ini.

Bila menggunakan comparable

Gunakan comparable apabila fungsi generik perlu menggunakan == pada nilai, menyimpannya dalam peta sebagai kunci, atau menggunakannya sebagai elemen peta/set. Tidak semua jenis boleh dibandingkan (hirisan, peta dan fungsi tidak boleh dibandingkan).

Semakan Pantas

Apakah maksud awalan ~ dalam kekangan kesatuan seperti ~int?

Ulang kaji: Kekangan

Perkara utama:

  • any: paling luas; comparable: menyokong ==; interface: memerlukan kaedah
  • Kesatuan (int|float64) membolehkan operator aritmetik
  • ~T memasukkan jenis bernama yang mempunyai T sebagai jenis asas
  • cmp.Ordered (Go 1.21+) untuk kekangan <, >, <=, >=
Percuma untuk bermula

Pelajari Go dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Kekangan: comparable dan Antara Muka” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Kekangan: comparable dan Antara Muka”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kekangan: comparable dan Antara Muka”?

Kekangan kesatuan dan terbina dalam comparable Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Go Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Kekangan: comparable dan Antara Muka” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Sintaks Parameter Jenis
  2. Kekangan: comparable dan Antara Muka
  3. Struktur Data Generik
  4. Generik dalam Amalan: Perangkap
← Kembali ke Go Academy