0Pricing
Go Academy · Pelajaran

Asersi Tipe dan Switch Tipe

Asersi tipe yang aman dan pola switch

Asersi Tipe dan Switch Tipe adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Pernyataan Tipe

Pernyataan tipe mengekstrak nilai konkret dari antarmuka. Sintaksnya adalah x.(T):

package main
import "fmt"

func main() {
    var i interface{} = "hello"
    s := i.(string)          // panics if wrong type
    fmt.Println(s, len(s))   // hello 5
}

Pernyataan Dua Nilai yang Aman

Gunakan bentuk koma-ok untuk menghindari kepanikan pada tipe yang salah:

package main
import "fmt"

func main() {
    var i interface{} = 42
    s, ok := i.(string)
    fmt.Println(s, ok)  // "" false
    n, ok := i.(int)
    fmt.Println(n, ok)  // 42 true
}

Pemeriksaan Tipe

Pemeriksaan tipe membandingkan tipe dinamis suatu nilai antarmuka dengan beberapa tipe:

package main
import "fmt"

func describe(i interface{}) string {
    switch v := i.(type) {
    case int:    return fmt.Sprintf("int: %d", v)
    case string: return fmt.Sprintf("string: %q", v)
    case bool:   return fmt.Sprintf("bool: %v", v)
    default:     return fmt.Sprintf("unknown: %T", v)
    }
}

func main() {
    fmt.Println(describe(42))
    fmt.Println(describe("hi"))
    fmt.Println(describe(3.14))
}

Pemeriksaan Tipe pada error

Pemeriksaan tipe sangat berguna untuk mengelompokkan kesalahan:

package main
import ("errors"; "fmt")

type NotFoundError struct{ Name string }
func (e *NotFoundError) Error() string { return e.Name + " not found" }

type PermError struct{}
func (e *PermError) Error() string { return "permission denied" }

func handle(err error) {
    switch e := err.(type) {
    case *NotFoundError: fmt.Println("missing:", e.Name)
    case *PermError:     fmt.Println("perm error")
    default:             fmt.Println("other:", e)
    }
}

func main() {
    handle(&NotFoundError{"user"})
    handle(errors.New("generic"))
}

Pernyataan ke Antarmuka

Anda dapat melakukan pernyataan ke tipe antarmuka lain, bukan hanya tipe konkret. Ini berguna untuk memeriksa apakah suatu objek mendukung perilaku opsional:

package main
import "fmt"

type Flusher interface{ Flush() }

type Writer interface{ Write(string) }

type BufferedWriter struct{ buf string }
func (b *BufferedWriter) Write(s string) { b.buf += s }
func (b *BufferedWriter) Flush()         { fmt.Println(b.buf); b.buf = "" }

func maybeFlush(w Writer) {
    if f, ok := w.(Flusher); ok { f.Flush() }
}

func main() {
    bw := &BufferedWriter{}
    bw.Write("hello")
    maybeFlush(bw)
}

Pernyataan pada Antarmuka Nil

Melakukan pernyataan pada antarmuka nil menyebabkan kepanikan. Selalu pastikan antarmuka tidak nil sebelum melakukan pernyataan:

package main
import "fmt"

func safePrint(i interface{}) {
    if i == nil {
        fmt.Println("nil")
        return
    }
    fmt.Printf("%T: %v\n", i, i)
}

func main() {
    safePrint(nil)
    safePrint(42)
}

Alternatif reflect.TypeOf

Untuk mencetak tipe tanpa melakukan pernyataan, gunakan fmt.Sprintf("%T", v) atau reflect.TypeOf(v):

package main
import ("fmt"; "reflect")

func main() {
    v := []int{1, 2, 3}
    fmt.Printf("%T\n", v)             // []int
    fmt.Println(reflect.TypeOf(v))    // []int
}

Afirmasi Tipe vs Konversi

Afirmasi tipe: mengambil tipe konkret dari antarmuka. Konversi tipe: mengubah satu tipe konkret menjadi tipe kompatibel lainnya. Keduanya merupakan operasi yang berbeda:

package main
import "fmt"

func main() {
    var i interface{} = int32(5)
    n := i.(int32)          // assertion — OK
    big := int64(n)         // conversion — OK
    fmt.Println(n, big)
}

Pola Koma-ok dalam select

Pola koma-ok juga berlaku pada penerimaan dari kanal untuk mendeteksi kanal yang ditutup. Idiom ringkas yang sama digunakan secara konsisten di Go.

Kapan Menggunakan Percabangan Tipe

Kasus penggunaan umum:

  • Penguraian JSON dengan bidang interface{}
  • Pengategorian galat
  • Pengiriman pesan protokol
  • Pemeriksaan antarmuka opsional (Flusher, Closer, dll.)

Pemeriksaan Singkat

Apa hasil dari afirmasi tipe non-aman yang gagal?

Ringkasan

Hal-hal penting:

  • x.(T) memicu panic pada tipe yang salah; x, ok := x.(T) aman
  • Percabangan tipe menangani beberapa tipe dengan rapi
  • Lakukan afirmasi ke antarmuka untuk memeriksa kemampuan opsional
  • Jangan pernah melakukan afirmasi pada antarmuka nil

Instruksi Latihan

Tulislah fungsi sum(values []any) float64 yang menggunakan percabangan tipe untuk menangani nilai int, float64, dan string (mengurai string), serta melewati nilai lainnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Asersi Tipe dan Switch Tipe” gratis?

Ya — teks lengkap “Asersi Tipe dan Switch Tipe” 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 “Asersi Tipe dan Switch Tipe”?

Asersi tipe yang aman dan pola switch 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 3 dari 4.

Berapa lama pelajaran “Asersi Tipe dan Switch Tipe” 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

  1. Mendefinisikan dan Mengimplementasikan Interface
  2. Interface Pustaka Standar Inti
  3. Asersi Tipe dan Switch Tipe
  4. Komposisi Interface dan Praktik Terbaik
← Kembali ke Go Academy