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

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.

主站蜘蛛池模板: 永胜县| 和田县| 绥中县| 特克斯县| 邳州市| 临邑县| 铜山县| 博湖县| 封开县| 汾西县| 梅河口市| 张掖市| 岱山县| 凯里市| 丹东市| 平利县| 开原市| 周宁县| 江津市| 灌阳县| 娄烦县| 德化县| 马尔康县| 塘沽区| 澳门| 岑溪市| 葵青区| 清苑县| 土默特右旗| 防城港市| 琼海市| 滕州市| 肇源县| 密云县| 桃园县| 瓮安县| 赣州市| 邮箱| 积石山| 枣强县| 潼关县|