Rumah > pembangunan bahagian belakang > Golang > Mengapa Penegasan Jenis Go Gagal dengan Jenis Alias?

Mengapa Penegasan Jenis Go Gagal dengan Jenis Alias?

Barbara Streisand
Lepaskan: 2024-12-16 05:47:12
asal
330 orang telah melayarinya

Why Does Go's Type Assertion Fail with Type Aliases?

Bagaimana untuk Menghantar ke Alias ​​Jenis dalam Go?

Pertimbangkan kod Go berikut:

package main

import "fmt"

type somethingFuncy func(int) bool

func funcy(i int) bool {
    return i%2 == 0
}

func main() {
    var a interface{} = funcy

    _ = a.(func(int) bool)  // Works

    fmt.Println("Awesome -- apparently, literally specifying the func signature works.")

    _ = a.(somethingFuncy)  // Panics

    fmt.Println("Darn -- doesn't get here. But somethingFuncy is the same signature as func(int) bool.")
}
Salin selepas log masuk

Penegasan jenis pertama berfungsi apabila secara eksplisit mengisytiharkan jenis sebagai func(int) bool. Walau bagaimanapun, yang kedua menggunakan jenis alias somethingFuncy panik.

Penjelasan

Tidak seperti pemutus, taip penegasan dalam Go dengan ketat membandingkan jenis sebenar nilai yang ditegaskan. Oleh itu, jenis alias somethingFuncy, walaupun berkongsi tandatangan yang sama seperti func(int) bool, dianggap sebagai jenis yang berbeza.

Bonus

Penegasan jenis dilakukan dalam kod berikut, yang hanya membandingkan jenis untuk kesaksamaan:

func main() {
    var a interface{} = funcy

    switch v := a.(type) {
    case func(int) bool:
        // Type successfully asserted as func(int) bool
    case somethingFuncy:
        // Type successfully asserted as somethingFuncy
    default:
        // Type assertion failed
    }
}
Salin selepas log masuk

Perbandingan ini gagal apabila menggunakan alias jenis kerana ia memerlukan padanan jenis yang tepat.

Atas ialah kandungan terperinci Mengapa Penegasan Jenis Go Gagal dengan Jenis Alias?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan