方法主要源於 oop 語言,在傳統物件導向語言中 (例如 c++), 我們會用乙個「類」來封裝屬於自己的資料和函式,這些類的函式就叫做方法。
雖然 go 不是經典意義上的物件導向語言,但是我們可以在一些接收者(自定義型別,結構體)上定義函式,同理這些接收者的函式在 go 裡面也叫做方法。
方法(method)的宣告和函式很相似, 只不過它必須指定接收者,我們先來看個簡單例子:
package main
type t struct{}
func (t t) f() {}
func main()
t.f()
}
接收者型別不是任意型別
例如:
package main
func (t int64) f() {}
func main()
當執行以下**會得到 cannot define new methods on non-local type int64 類似錯誤資訊,我們可以使用自定義型別來解決:
package main
type t int64
func (t t) f() {}
func main()
小結:接收者不是任意型別,它只能為用關鍵字 type 定義的型別(例如自定義型別,結構體)。
a. 接收者定義的方法名不能重複, 例如:
package main
type t struct{}
func (t) f() {}
func (t) f(a string) {}
func main()
t.f()
}
執行**我們會得到 method redeclared: t.f 類似錯誤。
b. 結構體方法名不能和字段重複,例如:
package main
type t struct
func (t) f(){}
func main()
t.f()
}
執行**我們會得到 : type t has both field and method named f 類似錯誤。
小結: 同乙個接收者的方法名不能重複 (沒有過載);如果是結構體,方法名不能和字段重複。
在 go 語言中,方法的接收者可以同時為值或者指標,例如:
package main
type t struct{}
func (t) f() {}
func (*t) n() {}
func main()
t.f()
t.n()
t1 := &t{} // 指標型別
t1.f()
t1.n()
}
可以看到無論值型別 t 還是指標型別 &t 都可以同時訪問 f 和 n 方法。
同樣我們先看一段**:
package main
import "fmt"
type t struct
func (m t) staythesame()
func (m *t) update()
func main()
fmt.println(m) //
m.staythesame()
fmt.println(m) //
m.update()
fmt.println(m) //
}
執行**輸出結果為:
小結:值作為接收者(t) 不會修改結構體值,而指標 *t 可以修改。
可以看到在 go 語言中方法有一些比較特殊的地方,主要為以下幾點:
接收者的型別只能為用關鍵字 type 定義的型別,例如自定義型別,結構體。
同乙個接收者的方法名不能重複 (沒有過載),如果是結構體,方法名還不能和欄位名重複。
值作為接收者無法修改其值,如果有更改需求,需要使用指標型別。
6.27日21:00有 運維前端 分享
分享內容大綱:
一、前端開發的定義
二、前端發展史
1、石器時代
2、青銅時代
3、鐵器時代
4、農業時代
5、現代化時代
三、前端需要掌握的技能
四、未來的發展
分享嘉賓:美女老師 jenny
介紹:資深前端開發工程師,有多年前端開發經驗,了解前端各大技術棧,曾就職於監控寶,研究運維管理平台,旨在實現運維視覺化管理,解決各種運維管理痛點
深入了解C語言
文章內容如下 首先,我們先來看下面這個經典的 int main 從這段 裡你看到了什麼問題?我們都知道,這段程式裡少了乙個 include 還少了乙個return 0 的返回語句。不過,讓我們來深入的學習一下,這段 在c 下無法編譯,因為c 需要明確宣告函式 這段 在c的編譯器下會編譯通過,因為在編...
深入了解A
一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...
深入了解A
一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...