Golang 可定址性 map和slice的區別

2021-09-13 01:32:33 字數 1029 閱讀 1465

qishuai 關注

package main

import "fmt"

type person struct

func main() ,

2:person,

3:person,

}//編譯錯誤:cannot assign to struct field m[1].name in map

m[1].name = "scrapup"

}

package main

import "fmt"

type person struct

func main() ,

2:&person,

3:&person,

}fmt.println(m[1].name)

m[1].name = "scrapup"

fmt.println(m[1].name)

}

小結:

第一種方式之所以編譯錯誤是因為map的value並不能得到該值對應的位址,故不能對其內容進行修改

第二種方式map的value本身就是位址型別,當然就能修改

但有文章指出:key和value中沒有指標可以使gc scanning更快; 具體沒測試,這裡只是延伸知識,使用的時候注意即可。

package main

import "fmt"

type person struct

func main() ,

2:person,

3:person,

}fmt.println(m[1].name)

//編譯成功

m[1].name = "scrapup"

fmt.println(m[1].name)

}

總結:

軟體的可維護性和可復用性

軟體的復用 reuse 或重用擁有眾多優點,如可以提高軟體的開發效率,提高軟體質量,節約開發成本,恰當的復用還可以改善系統的可維護性。物件導向設計復用的目標在於實現支援可維護性的復用。在物件導向的設計裡面,可維護性復用都是以物件導向設計原則為基礎的,這些設計原則首先都是復用的原則,遵循這些設計原則可...

golang的可空型別和零值

可空型別可以置為nil 在go裡面,基本型別都是不可空型別 var a int nil var a int default value of int,cannot be nil fmt.println a 0 0 types zero value int,int8,int16,int32,int64...

效能和可測試性的選擇

服務端存放的是所有使用者的資訊,資料同步的功能是獲取本使用者的資訊到本地資料庫。服務端將各資訊以json的格式發到客戶端,客戶端比較資料庫的每條記錄和json內容是否完全相同,如果完全相同則不更新,否則更新。這樣做,提高了新能,但大幅降低了可測試性。63個表,估計平均每個表7條記錄,必須測試400次...