Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menukar Antara Muka Nil kepada Penunjuk dengan Selamat dalam Go?

Bagaimanakah Saya Boleh Menukar Antara Muka Nil kepada Penunjuk dengan Selamat dalam Go?

Linda Hamilton
Lepaskan: 2024-12-07 06:57:11
asal
637 orang telah melayarinya

How Can I Safely Convert a Nil Interface to a Pointer in Go?

Menukar Antara Muka Nil kepada Penunjuk Jenis dalam Golang

Apabila cuba menukar antara muka nol kepada penunjuk jenis tertentu, ralat berlaku: "penukaran antara muka: antara muka tiada". Untuk memahami sebab ini gagal, adalah penting untuk memahami perbezaan antara jenis statik dan dinamik.

Seterusnya ialah antara muka, yang menentukan jenis statik. Pembolehubah jenis Nexter boleh menyimpan nilai pelbagai jenis dinamik yang melaksanakan antara muka Nexter, seperti *Nod atau jenis tersuai lain. Apabila pembolehubah antara muka nil diberikan kepada pembolehubah penunjuk, adalah mustahil untuk menentukan jenis dinamik sebenar nilai yang dipegangnya (kerana ia tidak memegang satu pun).

Akibatnya, penegasan jenis, yang biasanya digunakan dalam bentuk x.(T) untuk menegaskan bahawa x adalah jenis T dan membuangnya kepada T, gagal. Ini kerana spesifikasi bahasa Go menyatakan dengan jelas bahawa x.(T) hanya berfungsi apabila x bukan nol. Menggunakan penegasan jenis pada pembolehubah antara muka nil akan mengakibatkan panik masa jalan.

Untuk mencapai kesan yang serupa dengan n = p.(*Nod) tetapi bermula dari antara muka nil, pendekatan berikut boleh digunakan:

var p Nexter = (*Node)(nil)
Salin selepas log masuk

Nilai antara muka sebenarnya memegang sepasang (nilai, jenis dinamik). Dalam kes ini, p bukan nol tetapi memegang sepasang (nil, *Nod). Ini membolehkan penegasan jenis pada p berjaya.

Sebagai alternatif, untuk mengendalikan nilai nil secara eksplisit, gunakan borang "koma-ok":

if n, ok := p.(*Node); ok {
    fmt.Printf("n=%#v\n", n)
}
Salin selepas log masuk

Borang "koma-ok" memastikan bahawa tiada panik masa jalan berlaku, dan ok akan menjadi palsu jika penegasan gagal (iaitu, p memegang nilai sifar atau nilai yang berbeza taip).

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Antara Muka Nil kepada Penunjuk dengan Selamat 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