Go 語(yǔ)言中的 nil
nil?是 Go 語(yǔ)言中內(nèi)置的一個(gè)標(biāo)識(shí)符,有人會(huì)把它當(dāng)作其它語(yǔ)言中的NULL,這個(gè)是不準(zhǔn)確的。本文就來(lái)介紹一下 Go 語(yǔ)言中的?nil?的特點(diǎn)。
1. nil 是特殊的零值
在 Go 語(yǔ)言中,任何一個(gè)變量在聲明之后會(huì)自動(dòng)被賦予一個(gè)零值。數(shù)值類型的變量零值為0,字符串為"",而指針、切片、map、通道、函數(shù)和接口的零值就是nil。
代碼示例
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ? ?
"fmt"
- 5?
)
- 6
- 7?
func main() {
- 8? ? ? ? ?
var m map[int]string
- 9? ? ? ? ?
var p *int
- 10? ? ? ?
var c chan int
- 11? ? ? ?
var s []int
- 12? ? ? ?
var f func()
- 13? ? ? ?
var i interface{}
- 14? ? ? ?
fmt.Printf("map:%#vn", m)
- 15? ? ? ?
fmt.Printf("指針:%#vn", p)
- 16? ? ? ?
fmt.Printf("通道:%#vn", c)
- 17? ? ? ?
fmt.Printf("切片:%#vn", s)
- 18? ? ? ?
fmt.Printf("函數(shù):%#vn", f)
- 19? ? ? ?
fmt.Printf("接口:%#vn", i)
- 20?
}
執(zhí)行結(jié)果:
2. nil 標(biāo)識(shí)符無(wú)法比較
與其他語(yǔ)言不同,在 Go 語(yǔ)言中?nil 和 nil 之間是無(wú)法比較的。
代碼示例
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ? ?
"fmt"
- 5?
)
- 6
- 7?
func main() {
- 8? ? ? ? ?
fmt.Println(nil == nil)
- 9?
}
執(zhí)行結(jié)果:
而在 Java 中:
代碼塊
- 1?
class Untitled {
- 2? ? ? ? ?
public static void main(String[] args) {
- 3? ? ? ? ? ? ? ? ? ?
System.out.println(null==null);
- 4? ? ? ? ??
}
- 5?
}
以上代碼會(huì)輸出?true。
3. 不同類型的 nil 的長(zhǎng)度不同
不同類型的變量的內(nèi)存分配都是不同的,即使是?nil?,分配的內(nèi)存也是不同的。
代碼示例:
代碼塊
- 1?
package main
- 2
- 3?
import (
- 4? ? ? ? ?
"fmt"
- 5? ? ? ? ?
"unsafe"
- 6?
)
- 7
- 8?
func main() {
- 9? ? ? ? ?
var m map[int]string
- 10? ? ? ?
var p *int
- 11? ? ? ?
var c chan int
- 12? ? ? ?
var s []int
- 13? ? ? ?
var f func()
- 14? ? ? ?
var i interface{}
- 15? ? ? ?
fmt.Println("map:", unsafe.Sizeof( m ))
- 16? ? ? ?
fmt.Println("指針:", unsafe.Sizeof(p))
- 17? ? ? ?
fmt.Println("通道:", unsafe.Sizeof(c))
- 18? ? ? ?
fmt.Println("切片:", unsafe.Sizeof(s))
- 19? ? ? ?
fmt.Println("函數(shù):", unsafe.Sizeof(f))
- 20? ? ? ?
fmt.Println("接口:", unsafe.Sizeof(i))
- 21?
}
執(zhí)行結(jié)果:
4. 小結(jié)
本文主要介紹了 Go 語(yǔ)言中的特殊標(biāo)識(shí)符?nil?的一些特性:
- nil 是作為標(biāo)識(shí)一些特殊類型變量的零值存在的;
- nil 和 nil 是無(wú)法比較的,nil 可以零值為 nil 的變量比較;
- nil 的長(zhǎng)度隨著類型變化而變化。
文章來(lái)源于網(wǎng)絡(luò),侵刪!