最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang 中的 nil的場(chǎng)景分析

 更新時(shí)間:2021年03月17日 09:06:36   作者:追風(fēng)騷年  
這篇文章主要介紹了golang 中的 nil,本文通過多種場(chǎng)景分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

源碼中的 nil 是這樣定義的

// nil is a predeclared identifier representing the zero value for a
// pointer, channel, func, interface, map, or slice type.
var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

所以 nil 可以理解為這些類型的零值,聲明一個(gè)變量在沒有賦值的情況下,變量處于零值狀態(tài)。

場(chǎng)景一

func t1() {
 var i interface{}
 var p *int

 fmt.Println("p==i", p == i)
 fmt.Println("i=", i, "i==null", i == nil)
 fmt.Println("p=", p, "p==nil", p == nil)
 fmt.Println("i TypeOf=", reflect.TypeOf(i), "i ValueOf", reflect.ValueOf(i))
 fmt.Println("p TypeOf=", reflect.TypeOf(p), "p ValueOf", reflect.ValueOf(p))
 i = p
 fmt.Println("---")
 fmt.Println("p==i", p == i)
 fmt.Println("i=", i, "i==null", i == nil)
 fmt.Println("p=", p, "p==nil", p == nil)
 fmt.Println("i TypeOf=", reflect.TypeOf(i), "i ValueOf", reflect.ValueOf(i))
 fmt.Println("p TypeOf=", reflect.TypeOf(p), "p ValueOf", reflect.ValueOf(p))

}

真相是 i 剛開始沒有類型,而 p 是有類型,所以 p 和 i 都等于 nil,但是 == 可以理解為 php 或者 js 里面的 === 全等,既要類型相等,也要值相等。

在 i = p 之后,p 和 i 類型和值保持了一致所以會(huì)相等,但是 i 已經(jīng)不等于 nil 了,因?yàn)?nil 是 interface 的 0 值,或者說 i 已經(jīng)指向 p ,i 現(xiàn)在是個(gè)有類型狀態(tài)而非 0 值狀態(tài)。

結(jié)果如下

p==i false
i= <nil> i==null true
p= <nil> p==nil true
i TypeOf= <nil> i ValueOf <invalid reflect.Value>
p TypeOf= *int p ValueOf <nil>
---
p==i true
i= <nil> i==null false
p= <nil> p==nil true
i TypeOf= *int i ValueOf <nil>
p TypeOf= *int p ValueOf <nil>

場(chǎng)景二

func t3() {
 f1 := func(i interface{}) bool {
  return i == nil
 }

 var a *int
 fmt.Println(f1(a)) // false
 fmt.Println(f1(nil)) // true
}

a 傳遞到 func 里面,被轉(zhuǎn)成 interface,這個(gè) interface 是有類型的 interface,相當(dāng)于賦值了一下 i=a ,所以 i 的狀態(tài)不是 interface 的零值狀態(tài) ,和 interface 零值狀態(tài)的 nil 當(dāng)然是不相等

場(chǎng)景三

type A struct {
}

func (A) a1() int {
 return 123
}

func (*A) a2() int {
 return 321
}

type B interface {
}

func t2() {
 var a A
 var ap *A
 var b B
 var bp *B

 fmt.Println("a=", a, "a.a1()", a.a1(), a.a2()) //a= {} a.a1() 123 321; a == nil 會(huì)拋錯(cuò) struct 不能和 nil 進(jìn)行比較
 fmt.Println("ap=", ap, "ap==nil", ap == nil) //ap= <nil> ap==nil true

 fmt.Println("b=", b, " b==nil:", b == nil)  // b= <nil> b==nil: true
 fmt.Println("bp=", bp, " bp==nil:", bp == nil) //bp= <nil> bp==nil: true
}

結(jié)構(gòu)體的 0 值為 {}

到此這篇關(guān)于golang 中的 nil的場(chǎng)景分析的文章就介紹到這了,更多相關(guān)golang 中的 nil內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言基礎(chǔ)map用法及示例詳解

    Go語言基礎(chǔ)map用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)map的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • Golang中反射的常見用法分享

    Golang中反射的常見用法分享

    本篇文章主要為大家詳細(xì)介紹一些Go語言中常見的反射用法,涵蓋了常見的數(shù)據(jù)類型的反射操作。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-01-01
  • Go語言中內(nèi)存泄漏的常見案例與解決方法

    Go語言中內(nèi)存泄漏的常見案例與解決方法

    Go雖然是自動(dòng)GC類型的語言,但在編碼過程中如果不注意,很容易造成內(nèi)存泄漏的問題,本文為大家整理了一些內(nèi)存泄漏的常見Case與解決方法,希望對(duì)大家有所幫助
    2024-03-03
  • vscode搭建go開發(fā)環(huán)境案例詳解

    vscode搭建go開發(fā)環(huán)境案例詳解

    對(duì)于Visual Studio Code開發(fā)工具,有一款優(yōu)秀的GoLang插件,今天通過本文給大家介紹下vscode搭建go開發(fā)環(huán)境的詳細(xì)教程,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Air實(shí)現(xiàn)Go程序?qū)崟r(shí)熱重載使用過程解析示例

    Air實(shí)現(xiàn)Go程序?qū)崟r(shí)熱重載使用過程解析示例

    這篇文章主要為大家介紹了Air實(shí)現(xiàn)Go程序?qū)崟r(shí)熱重載使用過程解析示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 解決老版本goland無法調(diào)試新版本go的問題

    解決老版本goland無法調(diào)試新版本go的問題

    這篇文章主要給大家介紹了如何解決老版本goland無法調(diào)試新版本go的問題,文中通過代碼示例給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • golang結(jié)構(gòu)體與json格式串實(shí)例代碼

    golang結(jié)構(gòu)體與json格式串實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了golang結(jié)構(gòu)體與json格式串的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • 一文帶你深入理解Golang中的RWMutex

    一文帶你深入理解Golang中的RWMutex

    這篇文章主要為大家詳細(xì)介紹了Golang中RWMutex的相關(guān)知識(shí),知其然,更要知其所以然。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • Golang使用WebSocket通信的實(shí)現(xiàn)

    Golang使用WebSocket通信的實(shí)現(xiàn)

    這篇文章主要介紹了Golang使用WebSocket通信的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • golang bufio包中Write方法的深入講解

    golang bufio包中Write方法的深入講解

    這篇文章主要給大家介紹了關(guān)于golang bufio包中Write方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論

晋城| 习水县| 陇川县| 固原市| 合作市| 赞皇县| 宜丰县| 吉水县| 威海市| 济阳县| 耒阳市| 勃利县| 江西省| 晋州市| 黎城县| 荔波县| 白玉县| 博罗县| 北票市| 乌拉特前旗| 玉溪市| 渭南市| 常熟市| 宜良县| 泗洪县| 永川市| 凉城县| 陆良县| 中阳县| 台安县| 越西县| 固阳县| 巴彦县| 乐昌市| 昌江| 屯昌县| 呼伦贝尔市| 景宁| 隆化县| 南安市| 日照市|