官术网_书友最值得收藏!

Methods 

Let's say we wrote these functions, and we have defined email as before:

 type email string

func check(a email) { ... }
func send(a email, msg string) { ... }

Observe that email is always the first type in the function parameters.

Calling the functions look something like this:

e := "john@smith.com"
check(e)
send(e, "Hello World")

We may want to make that into a method of the email type. We can do so as follows:

type email string

func (e email) check() { ... }
func (e email) send(msg string) { ... }

(e email) is called the receiver of the method.

Having defined the methods thus, we may then proceed to call them:

e := "john@smith.com"
e.check()
e.send("Hello World")

Observe the difference between the functions and methods. check(e) becomes e.check(). send(e, "Hello World") becomes e.send("Hello World"). What's the difference other than syntactic difference? The answer is, not much.

A method in Go is exactly the same as a function in Go, with the receiver of the method as the first parameter of the function. It is unlike methods of classes in object-oriented programming languages.

So why bother with methods? For one, it solves the expression problem quite neatly. To see how, we'll look at the feature of Go that ties everything together nicely: interfaces.

主站蜘蛛池模板: 隆子县| 北安市| 越西县| 长泰县| 且末县| 徐汇区| 井研县| 澜沧| 六安市| 商南县| 柳河县| 福建省| 从化市| 棋牌| 磴口县| 吉林省| 龙南县| 英德市| 洛扎县| 夏河县| 肇州县| 辽阳县| 偃师市| 昌乐县| 微山县| 余姚市| 平顺县| 师宗县| 永胜县| 蓬莱市| 绥滨县| 顺昌县| 宝坻区| 财经| 德保县| 大理市| 五台县| 犍为县| 景谷| 平潭县| 西和县|