1 func(recv recevier_type)methodname(parameter_list)(return_value_list){}
方法名之前,func關鍵字之後的括號中指定接受者(receiver)。
如果recv是接受者(receiver)的例項,method1是recv的方法名,那麼方法的呼叫遵循傳統的object.name選擇器符號:recv.method1()。假如recv是乙個指標,go會自動解引用。
1package main23
import
"fmt"4
5type twoints struct
9 func(ti *twoints)add()int
1213 func(ti *twoints)plus()(re int)
1718 func(ti *twoints)addother(param int)(re int)
22 // 結構體上的例子
23func main()
32 fmt.println(ttt.addother(7))
33 }
package mainimport
"fmt
"type intvetor int
func (iv intvetor) sum(param int) (re int)
re = su +param
return
}//非結構體上的例子
func main()
fmt.println(tv.sum(333))
}
如果想給基本型別新增方法,一般是行不通的,因為基本型別和你新增方法的包不是同乙個,會出現編譯錯誤。
總結:指標方法和值方法都可以在指標或者非指標上被呼叫。也就是說,方法接收者是指標型別時,指標型別的值也是呼叫這個方法,反之亦然。
當乙個匿名型別被內嵌在結構體中時,匿名型別的可見方法也同樣被內嵌,這在效果上等同於外層型別繼承了這些方法,將父型別放在子型別中實現(子型別中的方法,可以直接使用父型別加點子型別方法的方式呼叫[father.childmethod()])
但是當父型別和子類型別有相同名字的方法怎麼辦呢?父型別的方法會覆蓋子型別的。
1package main23
import
"fmt"4
5type child struct
9type father struct
1213 func (fa *father) getname() (re string)
1718
func main() }
20fmt.println(c.getname())
21 }
Go 學習筆記 結構體
package main import fmt 結構體是由一系列具有一組相同或不同資料構成的資料集合,表達乙個整體概念。結構體定義 type struct variable type struct 宣告與初始化 variable name structure variable type 或 vari...
go 修改結構體方法 go結構體方法
golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...
Go學習筆記 結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...