有時候看別人的go程式碼,發現他們有的在程式碼裡面用了指針,有的不使用。
假設有個結構體類型叫做Person,發現有些方法會用func methodA (*person Person)作為參數,或是使用func *(person Person) methodA()作為結構體自己的方法,也就是person這個結構體 (建議學習:go)
#可以直接呼叫methodA,但使用的是指標。
或是在map結構裡面看到var personMap map[string]*Person 的用法
如果是從java轉過來golang的話,可能不太懂。因為java的世界是沒有指標的,直接傳遞過去就可以用了,但是到golang上要注意很多地方。
那麼什麼時候該用呢?為什麼有些地方需要用呢?
不使用指標的話,某些情況是沒辦法賦值給結構體的
接下來看一段程式碼,這段程式碼不使用任何指標,先定義一堆用於測試的物件
type Person struct { //person结构体,包含年龄,名称,车 age int name string car Car } type Car struct { //person名下的车 name string //车的名字 } var personMap map[string]Person //一个存放person的map func setName(person Person, name string) { //给参数person设置名字 person.name = name } func (person Person) setName(name string) { //设置名字 person.name = name } func printName(person Person){ //打印person的名字 fmt.Println(person.name) } func (person Person)printName(){ //结构体person自己支持打印名字 fmt.Println(person.name) }
所以得出結論,當我們需要修改結構體的變數內容的時候,方法傳入的結構體變數參數需要使用指針,也就是結構體的位址
需要修改map中的架構體的變數的時候也需要使用結構體位址作為map的value
如果只是讀取結構體變量,可以不使用指針,直接傳遞引用即可
*type 這裡的type這個變量存放的東西是地址,這點需要明確,需要使用&type獲取到地址。
以上是golang 什麼時候使用指針的詳細內容。更多資訊請關注PHP中文網其他相關文章!