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

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

go中的[]int{}和[]int有什么區(qū)別?

go中的[]int{}和[]int有什么區(qū)別?

Go
蕭十郎 2023-08-14 15:07:22
go里有兩種不同的定義,但是有什么區(qū)別呢?我已經(jīng)嘗試過以下方法:func main() {    var test1 []int    test2 := []int{}    if test1 == nil {        fmt.Println(1)    }    if test2 == nil {        fmt.Println(2)    }    fmt.Println("test1:", test1)    fmt.Println("test2:", test2)}這是輸出:1test1: []test2: []但為什么 test1 是 nil 而另一個(gè)不是呢?
查看完整描述

2 回答

?
元芳怎么了

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

就其本身而言,是 的類型切片的[]int拼寫。int

在:

var?test1?[]int

提供[]int變量的類型test1。該行作為一個(gè)整體不提供任何值,因此test1被初始化為type 的零值[]int。它的零值是[]int(nil),或者非正式地,就是 nil 。1

在:

test2?:=?[]int{}

提供[]int大括號(hào)括起來的初始值設(shè)定項(xiàng)列表的類型。也就是說,{}是一個(gè)復(fù)合文字:一個(gè)左大括號(hào),后跟一個(gè)元素列表(在本例中為空),后跟一個(gè)右大括號(hào)。該行的其余部分(:=左側(cè)的 和變量名稱)表示一個(gè)簡短的變量聲明。這為變量提供了類型test2,以及空列表生成的值。?[]int

在這種情況下,空列表生成的值是 的一個(gè)空切片int: 1 具有空的2后備存儲(chǔ),長度為零,容量為零。

這就是為什么test1is nil 但test2不是:test1保存零值,對(duì)于任何切片類型來說,都是nilnil無論如何轉(zhuǎn)換為該類型之后)。同時(shí)test2保存由三部分組成的切片頭,該頭覆蓋由復(fù)合文字創(chuàng)建的零長度支持?jǐn)?shù)組。

一個(gè) nil 切片——這是一個(gè)有點(diǎn)草率的措辭:它意味著一個(gè) slice-of 類型的值,T其實(shí)際值[]T(nil)而不是某些由三部分組成的切片頭——通??梢?em>用作相同類型。特別是,for i := range x兩者x = append(x, newElement)都處理得x == nil“很好”:它們對(duì)待它的方式與對(duì)待空切片的方式相同。打印切片的例程fmt也執(zhí)行此操作。3


1nil本身是無類型的。nil請(qǐng)參閱 Go 規(guī)范中變量部分下第一次提到的。

2至少在沒有使用或類似的情況下,不可能判斷unsafe.PointerGo 是否實(shí)際為后備數(shù)組分配了任何存儲(chǔ)空間。您對(duì)切片執(zhí)行的任何操作都可以為其提供一些容量,以便您可以將一些值放入內(nèi)存中的某個(gè)位置,都將或可能只是分配一個(gè)新的后備數(shù)組。該包有一些unsafe用于查看 Go 運(yùn)行時(shí)的技巧,但一般來說,您不需要也不應(yīng)該這樣做。

3相比之下,map類型的表現(xiàn)就沒那么好了。如果x是(非正式地說)一個(gè)可能為零的切片,并且m是一個(gè)可能為零的映射,我們可以這樣做:

x?=?append(x,?newElem)

但我們不能這樣做:

m[key]?=?newElem

我們必須首先檢查是否m為 nil,如果是,則分配一個(gè)空映射:

if?m?==?nil?{
????m?=?make(...)?//?put?in?the?right?type?here
????}
m[key]?=?newElem

所以比較常用的是:

var?x?[]T
m?:=?map[string]T{}

就在彼此旁邊,因?yàn)?code>x會(huì)表現(xiàn)得很好,也m不會(huì)表現(xiàn)得很好。


查看完整回答
反對(duì) 回復(fù) 2023-08-14
?
一只名叫tom的貓

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

這是 nil 和空切片之間的區(qū)別。在golang中,如果你聲明一個(gè)沒有值的變量,它的值將成為該變量類型的零值。數(shù)組的零值為 nil。不是空切片。可以使用 make 函數(shù)或 Shorty 用于 test2 的第二種方法來生成空切片



查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 2 回答
  • 0 關(guān)注
  • 335 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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