久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

面試官:值為 nil 為什么不等于 nil ?

小明同學(xué)去面試被問到了這么一個(gè)面試題,請(qǐng)看代碼:
var?f?func()
var?a?*struct{}

list?:=?[]interface{}{f,?a}
for?_,?item?:=?range?list?{
?if?item?==?nil?{
??fmt.Println("nil")
?}
}

請(qǐng)問輸出結(jié)果是啥?

可能很多同學(xué),會(huì)認(rèn)為結(jié)果是輸出兩個(gè) nil。

為什么呢?

因?yàn)?f 和 a 都沒初始化,都是 nil,所以循環(huán)遍歷后肯定也是 nil。

如果你的答案也是這樣,那就掉進(jìn)坑里了。

答案是,啥都不會(huì)輸出!

且聽我慢慢給你分析:

一、變量的值和類型

我們先來打印下這兩個(gè)值:

var?f?func()
var?a?*struct{}
fmt.Println(f,?a)

//?輸出結(jié)果
<nil>?<nil>

我們這樣打印其實(shí)是打印的是他的值,是 nil 沒錯(cuò)的。

但是類型不是 nil。

我們可以這樣打印他類型:

var?f?func()
var?a?*struct{}
fmt.Printf("%T,%T?\n",?f,?a)

//?輸出結(jié)果
func(),*struct?{}

二、if 判 nil 含有對(duì)類型的判斷

當(dāng)我們從 interface ?里面把對(duì)象取出來后,使用 if 進(jìn)行判斷,他不單單的比較的是值,還有類型。

看下這段代碼:

var?f?func()
var?a?*struct{}

list?:=?[]interface{}{f,?a,?nil}
?for?_,?item?:=?range?list?{
??fmt.Println("item=",?item)
??fmt.Printf("item?type:?%T?\n",?item)
??if?item?==?nil?{
???fmt.Println("item?==?nil")
??}
??fmt.Println("----")
?}
}

現(xiàn)在看下運(yùn)行結(jié)果:

$?go?run?main.go?
item=?<nil>
item?type:?func()?
----
item=?<nil>
item?type:?*struct?{}?
----
item=?<nil>
item?type:?<nil>?
item?==?nil
----

你會(huì)發(fā)現(xiàn)之后最后 nil 的判斷是通過的,前面兩個(gè)判斷都不通過。

三、怎么判斷值是否為 nil

我們?cè)趯懘a時(shí),最好是盡量避免這種代碼,如果硬要這么寫,那我們可以通過以下兩種常見方式判 nil。

1、斷言

list?:=?[]interface{}{f,?a}
for?_,?item?:=?range?list?{
?if?v,?ok?:=?item.(func());?ok?&&?v?==?nil?{
??fmt.Println("item?is?nil")
?}
?if?v,?ok?:=?item.(*struct{});?ok?&&?v?==?nil?{
??fmt.Println("item?is?nil")
?}
}

2、反射

list?:=?[]interface{}{f,?a}
for?_,?item?:=?range?list?{
?if?reflect.ValueOf(item).IsNil()?{
??fmt.Println("item?is?nil")
?}
}

你學(xué)廢了么?

原文:https://mp.weixin.qq.com/s/qPrfMgPVkl1gSLxR690zgw

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 贵州省| 云梦县| 宁津县| 濉溪县| 兴义市| 云林县| 日照市| 漳平市| 同心县| 西吉县| 泊头市| 通榆县| 开原市| 临安市| 北票市| 二连浩特市| 彰化市| 拉孜县| 新野县| 新巴尔虎左旗| 龙海市| 怀宁县| 航空| 偃师市| 吴川市| 建平县| 高淳县| 葫芦岛市| 建平县| 哈巴河县| 剑河县| 遂平县| 古交市| 自治县| 宿州市| 黄平县| 榕江县| 蓬安县| 安乡县| 崇仁县| 颍上县|