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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么列表在 Go 中很少使用?

為什么列表在 Go 中很少使用?

Go
不負相思意 2021-07-16 17:11:20
我是 Go 的新手,對此非常興奮。但是,在我廣泛使用的所有語言中:Delphi、C#、C++、Python - 列表非常重要,因為它們可以動態(tài)調整大小,而不是數(shù)組。在 Golang 中,確實有一個list.List結構體,但我很少看到關于它的文檔——無論是在Go By Example還是我擁有的三本 Go 書籍——Summerfield、Chisnal 和 Balbaert——他們都花了很多時間在數(shù)組和切片上然后跳到地圖。在源代碼示例中,我也發(fā)現(xiàn)很少或根本沒有使用list.List.似乎與 Python 不同的Range是,List 不支持 - IMO 的一大缺點。我錯過了什么嗎?切片當然很好,但它們仍然需要基于具有硬編碼大小的數(shù)組。這就是 List 的用武之地。有沒有辦法在沒有硬編碼數(shù)組大小的情況下在 Go 中創(chuàng)建數(shù)組/切片?為什么列表會被忽略?
查看完整描述

3 回答

?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

當您考慮列表時,幾乎總是 - 在 Go 中使用切片代替。切片動態(tài)調整大小。它們的底層是一個可以改變大小的連續(xù)內存片。

這是摘錄:

復制

b?=?make([]T,?len(a))copy(b,?a)?//?or?b?=?append([]T(nil),?a...)

a?=?append(a[:i],?a[j:]...)

刪除

a?=?append(a[:i],?a[i+1:]...)?//?or?a?=?a[:i+copy(a[i:],?a[i+1:])]

刪除而不保留順序

a[i],?a?=?a[len(a)-1],?a[:len(a)-1]

流行音樂

x,?a?=?a[len(a)-1],?a[:len(a)-1]

a?=?append(a,?x)


查看完整回答
反對 回復 2021-07-19
?
婷婷同學_

TA貢獻1844條經(jīng)驗 獲得超8個贊

幾個月前,當我第一次開始研究 Go 時,我問過這個問題。從那時起,我每天都在閱讀有關 Go 的文章,并使用 Go 進行編碼。


因為我沒有得到這個問題的明確答案(雖然我已經(jīng)接受了一個答案)我現(xiàn)在要根據(jù)我所學到的來回答這個問題,因為我問過它:


有沒有辦法在沒有硬編碼數(shù)組大小的情況下在 Go 中創(chuàng)建數(shù)組/切片?


是的。切片不需要硬編碼數(shù)組即可slice:


var sl []int = make([]int,len,cap)

此代碼分配容量為-sl大小的slice ,并且是可以在運行時分配的變量。lencaplencap


為什么被list.List忽略?


list.List在 Go 中似乎很少受到關注的主要原因是:


正如@Nick Craig-Wood 的回答中所解釋的那樣,使用切片無法完成的列表幾乎沒有任何事情可以完成,通常更有效,并且語法更簡潔,更優(yōu)雅。例如范圍構造:


for i:=range sl {

  sl[i]=i

}

不能與列表一起使用 - 需要 C 風格的 for 循環(huán)。并且在許多情況下,C++ 集合樣式語法必須與列表一起使用: push_back等。


也許更重要的是,list.List它不是強類型的——它與 Python 的列表和字典非常相似,允許在集合中混合各種類型。這似乎與 Go 處理事物的方法背道而馳。Go 是一種非常強類型的語言——例如,Go 中從不允許隱式類型轉換,即使是從intto的 upCast也int64必須是顯式的。但是 list.List 的所有方法都采用空接口 - 任何事情都可以。


我放棄 Python 而轉向 Go 的原因之一是因為 Python 類型系統(tǒng)的這種弱點,盡管 Python 聲稱是“強類型”(IMO 并非如此)。Golist.List似乎是一種“雜種”,誕生于 C++vector<T>和 Python 的 List(),并且在 Go 本身中可能有點格格不入。


如果在不久的將來的某個時候,我們發(fā)現(xiàn) list.List 在 Go 中已被棄用,我不會感到驚訝,盡管它可能會保留,以適應那些即使使用良好的設計實踐也能最好地解決問題的罕見情況擁有一個包含各種類型的集合?;蛘咚赡転?C 系列開發(fā)人員提供一個“橋梁”,讓他們在學習切片的細微差別之前熟悉 Go,AFAIK。(在某些方面,切片似乎類似于 C++ 或 Delphi 中的流類,但并非完全如此。)


雖然來自 Delphi/C++/Python 背景,但在我最初接觸 Go 時,我發(fā)現(xiàn)list.List比 Go 的 slice 更熟悉,因為我對 Go 越來越熟悉,我回去將所有列表更改為 slice。我還沒有發(fā)現(xiàn)任何東西slice和/或map不允許我這樣做,所以我需要使用list.List.


查看完整回答
反對 回復 2021-07-19
  • 3 回答
  • 0 關注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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