最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

全部開(kāi)發(fā)者教程

Go 入門教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

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。

代碼示例

package main

import (
    "fmt"
)

func main() {
    var m map[int]string
    var p *int
    var c chan int
    var s []int
    var f func()
    var i interface{}
    fmt.Printf("map:%#v\n", m)
    fmt.Printf("指針:%#v\n", p)
    fmt.Printf("通道:%#v\n", c)
    fmt.Printf("切片:%#v\n", s)
    fmt.Printf("函數(shù):%#v\n", f)
    fmt.Printf("接口:%#v\n", i)
}

執(zhí)行結(jié)果:

圖片描述

2. nil 標(biāo)識(shí)符無(wú)法比較

與其他語(yǔ)言不同,在 Go 語(yǔ)言中 nil 和 nil 之間是無(wú)法比較的。

代碼示例

package main

import (
    "fmt"
)

func main() {
    fmt.Println(nil == nil)
}

執(zhí)行結(jié)果:

圖片描述

而在 Java 中

class Untitled {
    public static void main(String[] args) {
        System.out.println(null==null);
    }
}

以上代碼會(huì)輸出 true

3. 不同類型的 nil 的長(zhǎng)度不同

不同類型的變量的內(nèi)存分配都是不同的,即使是 nil ,分配的內(nèi)存也是不同的。

代碼示例:

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var m map[int]string
    var p *int
    var c chan int
    var s []int
    var f func()
    var i interface{}
    fmt.Println("map:", unsafe.Sizeof( m ))
    fmt.Println("指針:", unsafe.Sizeof(p))
    fmt.Println("通道:", unsafe.Sizeof(c))
    fmt.Println("切片:", unsafe.Sizeof(s))
    fmt.Println("函數(shù):", unsafe.Sizeof(f))
    fmt.Println("接口:", unsafe.Sizeof(i))
}

執(zhí)行結(jié)果:

圖片描述

4. 小結(jié)

本文主要介紹了 Go 語(yǔ)言中的特殊標(biāo)識(shí)符 nil 的一些特性:

  • nil 是作為標(biāo)識(shí)一些特殊類型變量的零值存在的;
  • nil 和 nil 是無(wú)法比較的,nil 可以零值為 nil 的變量比較;
  • nil 的長(zhǎng)度隨著類型變化而變化