Rumah > pembangunan bahagian belakang > Golang > Mengapakah `nil([]int)` Sama dengan `nil`, Tetapi `nil(antara muka{})` Tidak?

Mengapakah `nil([]int)` Sama dengan `nil`, Tetapi `nil(antara muka{})` Tidak?

Patricia Arquette
Lepaskan: 2024-11-03 07:20:03
asal
714 orang telah melayarinya

Why Does `nil([]int)` Equal `nil`, But `nil(interface{})` Doesn't?

Nil Slice vs. Nil Interface

Dalam Go, hirisan nol tidak sama dengan antara muka nil. Tingkah laku ini ditunjukkan dalam kod berikut:

<code class="go">package main

import "fmt"

func main() {
    var i []int = nil
    yes(i) // output: true
    no(i)  // output: false
}

func yes(thing []int) {
    fmt.Println(thing == nil)
}

func no(thing interface{}) {
    fmt.Println(thing == nil)
}</code>
Salin selepas log masuk

Perbezaan dalam output antara kedua-dua fungsi adalah disebabkan oleh cara Go mengendalikan jenis antara muka.

Jenis Antaramuka

Jenis antara muka dalam Go ialah koleksi kaedah yang boleh dilaksanakan oleh jenis nilai tertentu. Apabila pembolehubah{} antara muka digunakan, ia boleh menyimpan sebarang nilai dari sebarang jenis yang melaksanakan antara muka.

Antara Muka Tiada

Apabila pembolehubah{} antara muka diberikan kepada sifar, medan data antara muka ditetapkan kepada sifar, tetapi medan jenis tidak. Akibatnya, antara muka nol tidak sama dengan nol.

Slice Nil

Sebaliknya, hirisan nil hanyalah hirisan tanpa unsur. Apabila anda membandingkan kepingan sifar dengan sifar, perbandingan itu dinilai kepada benar kerana kedua-dua medan data dan jenis kepingan ditetapkan kepada sifar.

Kesimpulan

Oleh itu, perbezaan dalam output antara dua fungsi dalam contoh kod adalah disebabkan oleh fakta bahawa nil([]int) ialah hirisan nil, manakala nil(antara muka{}) ialah antara muka nil. Potongan sifar dinilai kepada benar jika dibandingkan dengan sifar, manakala antara muka sifar dinilai kepada palsu.

Atas ialah kandungan terperinci Mengapakah `nil([]int)` Sama dengan `nil`, Tetapi `nil(antara muka{})` Tidak?. 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