在Google Go中,我讀到字符串是不可變的,但是int是嗎? 其他類型呢?作爲一個稍微老一點的程序員,我更喜歡可變性,即使我知道不變性的好處,但我寧願過着危險的生活。哪些類型在Google Go語言中可變且不可變?
知道什麼類型是可變的或不可變的將是非常有益的。
更新,我最關心的是實際問題取決於類型是可變的或不可變的。正如Java中的典型例子,如果您在循環中創建一個字符串並循環10,000次,您將獲得10,000個字符串的創建,然後再進行垃圾收集。這實際上是我所在公司的一個項目中的一個嚴重問題。
問題是,在某些情況下Go的不變性會導致同樣的問題嗎?
它影響你應該如何對待變種。 (或者我假設它)。
再次更新,我也關心其他實際問題。知道某些東西是不可變的,意味着我可以編寫並行的代碼,並且更新對象的一個引用不應該更新其他引用。不過有時候我想做危險的事情,我想要可變性。
這些是可變性與不可變性的後果,並影響我如何編寫代碼。
我問這個問題的原因是這是一個性能問題,如果我正在編寫一個循環運行數百萬次,我不想創建大量對象。例如,在Java循環中,我們不希望每次循環都創建一個字符串,所以我們使用StringBuffer。 – Phil
我的假設當然是不可變的類型將會創建大量的對象。 (可能並非如此,具體取決於分配器) – Phil
在某種程度上,因爲極其聰明的垃圾回收器可能會重複使用字符串*片段*,您會留下一些聰明的東西(除了連續的單詞陣列之外的任何東西)實現。使用'[]字節'然後,注意在全面的utf-8 *字符*(又名符文)具有可變長度。 – ypb