Golang教學 以下中由Golang教學
專欄為大家一起介紹Go 語言中的方法所理解,而希望對需要的朋友則有所幫助!
#定義
方法是具有特殊接收器參數的函數,即在func 和方法名之間方法接收者。 func (s Student) GetName() string {
return s.name}func (s *Student) SetName(name string) {
s.name = name}
在你需要修改物件的時候,才必須用指標(引用傳遞),否則將所屬類型宣告為字面量即可(值傳遞)。另外避免在每個方法呼叫上複製該值。 <pre class="brush:php;toolbar:false;">type Integer intfunc (a *Integer) Increase(i Integer) {
*a = *a + i}func main() {
var a Integer = 2
var b Integer = 2
//a.Increase(b)
//(&amp;a).Increase(b)
(*Integer).Increase(&amp;a, b)
fmt.Println(a)}</pre>
該方法並不屬於Integer 類,而是屬於指向Integer 的指標類型,我們在呼叫方法時,之所以可以直接在a 實例上呼叫Increase 方法,是因為Go 語言編譯階段會自動將a 轉換為對應的指標型別&a
,所以真正呼叫的程式碼是
其實是語法糖<pre class="brush:php;toolbar:false;">type A struct {
name string}func (a A) Name() string {
a.name = "Hi! " + a.name return a.name}func main() {
a := A{name: "test"}
fmt.Println(a.Name())
fmt.Println(A.Name(a))}</pre>
a.Name()
其實是
的語法糖,變數a 就是所謂的方法接收者。 func NameOfA(a A) string {
a.name = "Hi! " + a.name return a.name}func main() {
t1 := reflect.TypeOf(A.Name)
t2 := reflect.TypeOf(NameOfA)
fmt.Println(t1 == t2)// true}
go 語言中函數型別只和參數與回傳值相關,所以這兩個型別相等就能證明
以上是詳解Go 語言中的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!