Rumah > pembangunan bahagian belakang > Golang > Mengapa Jenis Penegasan Panik Apabila Menghantar ke Alias ​​Jenis dalam Go?

Mengapa Jenis Penegasan Panik Apabila Menghantar ke Alias ​​Jenis dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-14 04:55:14
asal
241 orang telah melayarinya

Why Does Type Assertion Panic When Casting to a Type Alias in Go?

Jenis Penghantaran dalam Go: Memahami Penegasan Jenis

Dalam Go, penghantaran digunakan untuk menukar nilai kepada jenis data yang berbeza. Walau bagaimanapun, apabila berurusan dengan alias jenis, pendekatan yang sedikit berbeza diperlukan, seperti yang ditunjukkan di bawah.

Coretan Kod

Pertimbangkan kod berikut:

type somethingFuncy func(int) bool

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

var a interface{} = funcy

func main() {

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

    _ = a.(somethingFuncy)  // Panics
}
Salin selepas log masuk

Di sini, penegasan jenis pertama (_ = a.(func(int) bool)) berjaya menukar nilai a kepada jenis fungsi func(int) bool. Walau bagaimanapun, penegasan kedua (_ = a.(somethingFuncy)) gagal dengan panik.

Mengapa Panik?

Sebab panik terletak pada sifat penegasan jenis dalam Go. Untuk penegasan jenis, hanya jenis nilai sebenar yang penting. Dalam kes ini, jenis a ialah antara muka{}, yang diberikan nilai fungsi fungsi. Walau bagaimanapun, somethingFuncy ialah alias jenis yang berbeza, walaupun berkongsi tandatangan fungsi yang sama seperti func(int) bool.

Memahami Penegasan Jenis

Dalam Go, penegasan taip menentukan sama ada nilai adalah daripada nilai tertentu taip dan, jika ya, ekstrak nilai asas. Sintaks ialah x.(T), dengan x ialah nilai dan T ialah jenis sasaran. Perkara utama di sini ialah jenis sasaran mesti sepadan dengan jenis x yang tepat, tanpa sebarang alias.

Adakah Terdapat Cara Bersih untuk Menghantar ke Tandatangan Fungsi yang Lebih Panjang?

Malangnya, tiada cara langsung untuk menghantar ke tandatangan fungsi yang lebih panjang menggunakan penegasan jenis. Ini kerana penegasan jenis hanya mempertimbangkan jenis nilai yang tepat, bukan keserasiannya dengan jenis lain.

Kesimpulan

Walaupun penghantaran jenis adalah penting dalam Go untuk menukar nilai antara jenis data yang berbeza, ia adalah penting untuk memahami batasan apabila berurusan dengan jenis alias. Penegasan jenis bergantung pada padanan jenis yang tepat dan percubaan untuk menegaskan nilai pada tandatangan fungsi yang lebih panjang selalunya akan mengakibatkan panik.

Atas ialah kandungan terperinci Mengapa Jenis Penegasan Panik Apabila Menghantar ke Alias ​​Jenis dalam Go?. 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