在 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...