Cara Menetapkan Antara Muka kepada Tiada di Golang: Apakah Perbezaan Antara Tiada Penunjuk dan Antara Muka?

Susan Sarandon
Lepaskan: 2024-10-31 10:08:02
asal
137 orang telah melayarinya

How to Set an Interface to Nil in Golang: What's the Difference Between Nil a Pointer and an Interface?

Menetapkan Antara Muka kepada Sifar dalam Golang

Dalam Golang, nilai antara muka mewakili gelagat objek, tetapi ia bukan objek sebenar itu sendiri. Apabila cuba menghilangkan nilai dalaman antara muka, anda sebenarnya berurusan dengan penuding kepada jenis konkrit, yang berbeza daripada nilai antara muka.

Tiada Antara Muka

Jika anda mempunyai antara muka yang nilainya ingin anda tetapkan kepada sifar, gunakan fungsi berikut:

<code class="go">func setNilIf(v *interface{}) {
    *v = nil
}</code>
Salin selepas log masuk

Contoh:

<code class="go">var i interface{} = "Bob"
fmt.Printf("Before: %v\n", i)
setNilIf(&i)
fmt.Printf("After: %v\n", i)</code>
Salin selepas log masuk

Output:

Before: Bob
After: <nil>
Salin selepas log masuk

Tiada Penunjuk

Dalam kes anda, anda berurusan dengan penuding kepada jenis konkrit. Untuk menghilangkan penunjuk, anda boleh menggunakan:

Menggunakan Tidak Selamat.Penunjuk:

<code class="go">func setNilPtr(p unsafe.Pointer) {
    *(**int)(p) = nil
}</code>
Salin selepas log masuk

Contoh:

<code class="go">type TYP struct {
    InternalState string
}
typ := &TYP{InternalState: "filled"}
fmt.Printf("Before: %v\n", typ)
setNilPtr(unsafe.Pointer(&typ))
fmt.Printf("After: %v\n", typ)</code>
Salin selepas log masuk

Output:

Before: &{filled}
After: <nil>
Salin selepas log masuk
Salin selepas log masuk

Menggunakan Refleksi:

<code class="go">func setNilPtr2(i interface{}) {
    v := reflect.ValueOf(i)
    v.Elem().Set(reflect.Zero(v.Elem().Type()))
}</code>
Salin selepas log masuk

Contoh:

<code class="go">typ2 := &TYP{InternalState: "filled"}
fmt.Printf("Before: %v\n", typ2)
setNilPtr2(&typ2)
fmt.Printf("After: %v\n", typ2)</code>
Salin selepas log masuk

Output:

Before: &{filled}
After: <nil>
Salin selepas log masuk
Salin selepas log masuk

Nota:

Untuk kesederhanaan, secara amnya disyorkan untuk memberikan sifar terus kepada pembolehubah penunjuk, daripada menggunakan kaedah yang kompleks seperti di atas.

Atas ialah kandungan terperinci Cara Menetapkan Antara Muka kepada Tiada di Golang: Apakah Perbezaan Antara Tiada Penunjuk dan Antara Muka?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!