深入了解 Go 語言的方法

2021-09-27 05:16:27 字數 2350 閱讀 2113

方法主要源於 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 ...