Batasan: comparable dan Interface
Batasan union dan tipe bawaan comparable
Batasan: comparable dan Interface adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa itu batasan?
Batasan membatasi tipe yang dapat digunakan sebagai argumen tipe. Tanpa batasan, parameter tipe adalah any (antarmuka kosong—hanya mendukung penugasan dan perbandingan melalui ==).
Batasan any
any (alias untuk interface{}) adalah batasan paling luas—semua tipe memenuhinya. Anda hanya dapat menggunakan operasi yang didukung semua tipe: penugasan dan penerusan ke parameter antarmuka.
func Print[T any](v T) { fmt.Println(v) }Batasan comparable
comparable membatasi parameter tipe pada tipe yang mendukung == dan !=. Batasan ini diperlukan untuk menggunakan tipe sebagai kunci peta atau dalam pemeriksaan kesetaraan.
func Contains[T comparable](s []T, v T) bool {
for _, item := range s {
if item == v { return true }
}
return false
}Batasan antarmuka
Gunakan antarmuka sebagai batasan untuk mewajibkan metode tertentu. Parameter tipe harus memiliki semua metode pada antarmuka tersebut.
type Stringer interface { String() string }
func Print[T Stringer](v T) {
fmt.Println(v.String())
}Batasan gabungan
Gunakan gabungan tipe dengan | untuk membatasi pada sekumpulan tipe konkret. Ini memungkinkan penggunaan operator (seperti +) yang bukan bagian dari antarmuka apa pun.
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 tipe dasar
Gunakan ~T untuk menyertakan bukan hanya T, tetapi juga semua tipe yang tipe dasarnya adalah T (misalnya, tipe kustom yang didefinisikan sebagai type MyInt int).
type Integer interface { ~int | ~int64 }
type MyInt int
// MyInt satisfies Integer because its underlying type is intgolang.org/x/exp/constraints
Paket constraints menyediakan antarmuka kendala umum: Ordered (mendukung <), 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
}Paket cmp (Go 1.21)
Go 1.21 menambahkan kendala cmp.Ordered serta fungsi cmp.Compare/cmp.Less ke pustaka standar, sehingga menggantikan dependensi exp/constraints.
import "cmp"
func Min[T cmp.Ordered](a, b T) T { return min(a, b) }Menggabungkan kendala
Sisipkan beberapa antarmuka ke dalam sebuah kendala untuk mewajibkan beberapa properti:
type Printable interface {
comparable
fmt.Stringer
}Inferensi tipe
Kompilator menyimpulkan parameter tipe dari argumen. Jika kendalanya terlalu luas (any), argumen tipe eksplisit mungkin diperlukan untuk mengarahkan inferensi.
Kapan menggunakan comparable
Gunakan comparable ketika fungsi generik perlu menggunakan == pada nilai, menyimpan nilai tersebut dalam peta sebagai kunci, atau menggunakannya sebagai elemen peta/himpunan. Tidak semua tipe dapat dibandingkan (slice, map, dan fungsi tidak dapat dibandingkan).
Pemeriksaan Cepat
Apa arti awalan ~ dalam kendala gabungan seperti ~int?
Rangkuman: Kendala
Poin penting:
- any: paling luas; comparable: mendukung ==; antarmuka: memerlukan metode
- Gabungan (int|float64) memungkinkan operator aritmetika
- ~T menyertakan tipe bernama dengan T sebagai tipe dasarnya
- cmp.Ordered (Go 1.21+) untuk kendala <, >, <=, >=
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Batasan: comparable dan Interface” gratis?
Ya — teks lengkap “Batasan: comparable dan Interface” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Batasan: comparable dan Interface”?
Batasan union dan tipe bawaan comparable Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Batasan: comparable dan Interface” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Sintaks Parameter Tipe
- Batasan: comparable dan Interface
- Struktur Data Generik
- Generik dalam Praktik: Jebakan