go中的方法到底是個啥

2021-08-27 13:46:16 字數 2005 閱讀 4033

在 go 語言裡,方法和函式只差了乙個,那就是方法在 func 和識別符號之間多了乙個引數。

type user struct 

//這是函式的定義

func notify(email string)

//這是方法的定義

func (u user) notify(email string)

我們可以看到,方法是在 func 和 notify 之間多了乙個 user 型別的引數 u,這個 u 就稱作接收者。

首先,我們是先要定義乙個型別,比如就是 user 好了,然後我們再定義方法。

type user struct 

func (u user) notify()

func (u *user) changeemail(email string)

我們定義了兩個方法,乙個是 notify,它是值接收者方法;還有乙個是 changeemail,它是指標接收者方法。可以看到,值接收者方法,接收者是乙個副本,無法修改;指標接收者是引用,可以修改。

值接收者方法:

package main

import (

"fmt"

)type vertex struct

func (v vertex)abs() 

func main()

fmt.println(v)

v.abs()

fmt.println(v)

}

輸出:

指標接收者方法:

package main

import (

"fmt"

)type vertex struct

func (v *vertex)abs() 

func main()

fmt.println(v)

v.abs()

fmt.println(v)

}

輸出:

我們再來看一下呼叫。

daryl := 

daryl.changeemail("[email protected]")

daryl.notify()

看看,是不是很熟悉! daryl 就是物件,name 和 email 就是屬性,notify 和 changeemail 就是它的方法。只是,不同的是,我們沒有將它放到 class 中,而是用另外一種方式讓它們結合了,有了關係!

方法宣告時要注意以下幾點:

1.接收者的型別定義和方法宣告必須在同一包內

檢視專案結構:

我們在包1內的hello.go內建立了個struct結構,在method1.go內建立了m1方法,在包2下面的method2.go檔案內也建立了m1方法,其中method1.go的m1方法建立成功,method2.go的m1方法建立失敗。

2.不能為內建型別宣告方法

//這樣是可以的

type myfloat float64

func (f myfloat) abs() float64

return float64(f)

}func main()

//不能為內建型別建立方法

func (f float64) abs() float64

return float64(f)

}func main()

構造方法到底是個啥?

來來來,搞這個構造方法之前我們來看看啥是方法,方法就是一些語句湊在一塊實現一些功能的集合,方法通常由兩部分組成 引數和返回值。引數是進入方法裡面的資料,通過方法體裡面的語句執行啊執行,哎!出來乙個產物也就是乙個返回值。格式參照 修飾符 返回值型別 方法名 引數型別 引數名,我們知道,方法裡面可以有引...

Webhook到底是個啥?

伺服器 jenkins servergit serverngrokgithub webhook 在配置jenkins實現前端自動化構建的過程中,對於自動化的過程理解很模糊,只是知道jenkins伺服器,git倉庫和後端應用伺服器這三個概念。答案就是 git webhook機制發出請求,告知jenki...

elemtype到底是個啥?

以前對這個東西的一知半解,今天有時間,查了多方面的資料,總結下 elemtype簡單來說就是 用來更好的替代,他也可以叫做別的名字,比如說 define elemtype int 寫程式,就可以用elemtype來進行替代int,若以後想要改elemtype所定義的資料型別為char,直接 defi...