第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果某物不在地圖中,返回值取什么值?

如果某物不在地圖中,返回值取什么值?

Go
慕慕森 2023-05-04 16:43:31
好的,根據(jù)這個(gè):如何檢查地圖是否包含 go 中的鍵?if val, ok := m["foo"]; ok {    //do something here}很好,但是為什么我們不能這樣做:val, ok := m["foo"]if val == nil {   // cannot compare val to nil}我收到一個(gè)編譯錯(cuò)誤,說我無法將 val 與 nil 進(jìn)行比較,但是 val 有什么價(jià)值呢?我可以將它與什么進(jìn)行比較,以確定它是否存在?m 的類型如下:type m map[string]struct{}
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

Go 編程語言規(guī)范

索引表達(dá)式

對于映射類型 M 的 a:如果映射為 nil 或不包含這樣的條目,則 a[x] 是 M 的元素類型的零值。

零值

當(dāng)通過聲明或調(diào)用 new 為變量分配存儲(chǔ)空間時(shí),或者通過復(fù)合文字或調(diào)用 make 創(chuàng)建新值時(shí),并且沒有提供顯式初始化,則給出變量或值一個(gè)默認(rèn)值。此類變量或值的每個(gè)元素都設(shè)置為其類型的零值:布爾值為 false,數(shù)字類型為 0,字符串為 "",指針、函數(shù)、接口、切片、通道和映射為 nil。


Go 編程語言規(guī)范

復(fù)合文字

復(fù)合文字為結(jié)構(gòu)體、數(shù)組、切片和映射構(gòu)造值,并在每次計(jì)算它們時(shí)創(chuàng)建一個(gè)新值。它們由文字類型和后跟大括號綁定的元素列表組成。每個(gè)元素前面可以有一個(gè)相應(yīng)的鍵。對于結(jié)構(gòu)文字,以下規(guī)則適用:

文字可以省略元素列表;這樣的文字對其類型求值為零值。

對于您的示例,鍵入struct{},省略復(fù)合文字中的元素列表,struct{}{},作為零值。

例如,

package main


import "fmt"


func main() {

? ? m := map[string]struct{}{}

? ? val, ok := m["foo"]

? ? fmt.Printf("%T %v\n", val, val)

? ? if val == struct{}{} {

? ? ? ? fmt.Println("==", val, ok)

? ? }

}

輸出:

struct?{}?{}
==?{}?false

Go 編程語言規(guī)范

變量聲明

變量聲明創(chuàng)建一個(gè)或多個(gè)變量,將相應(yīng)的標(biāo)識符綁定到它們,并為每個(gè)變量賦予一個(gè)類型和一個(gè)初始值。

如果給出了一個(gè)表達(dá)式列表,則變量將使用遵循賦值規(guī)則的表達(dá)式進(jìn)行初始化。否則,每個(gè)變量都被初始化為其零值。

如果存在類型,則每個(gè)變量都被賦予該類型。否則,每個(gè)變量在賦值中被賦予相應(yīng)初始化值的類型。

在您的示例中,您可以聲明一個(gè)沒有初始值的類型變量struct{},該變量將被初始化為該struct{}類型的零值。

例如,

package main


import "fmt"


func main() {

? ? m := map[string]struct{}{}

? ? val, ok := m["foo"]

? ? fmt.Printf("%T %v\n", val, val)

? ? var zeroValue struct{}

? ? if val == zeroValue {

? ? ? ? fmt.Println("==", val, ok)

? ? }

}

輸出:


struct {} {}

== {} false


查看完整回答
反對 回復(fù) 2023-05-04
?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

你當(dāng)然可以做你上面所做的。與 nil 進(jìn)行比較取決于您在 map 中的值類型。如果是,interface{}你可以將它與 nil 進(jìn)行比較:


m := map[string]interface{}{}


val, _ := m["foo"]


if val == nil {

    fmt.Println("no index")

}


查看完整回答
反對 回復(fù) 2023-05-04
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號