Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

第7章:方法

方法定义

方法总是绑定对象实例,并隐式将实例作为第一实参 (receiver)。

一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。

1
2
3
func (recevier type) methodName(参数列表)(返回值列表){}

参数和返回值可以省略

匿名字段

可以像字段成员那样访问匿名字段方法,编译器负责查找。

通过匿名字段,可获得和继承类似的复用能力。依据编译器查找次序,只需在外层定义同名方法,就可以实现 “override”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import "fmt"

type User struct {
id int
name string
}

type Manager struct {
User
title string
}

func (self *User) ToString() string {
return fmt.Sprintf("User: %p, %v", self, self)
}

func (self *Manager) ToString() string {
return fmt.Sprintf("Manager: %p, %v", self, self)
}

func main() {
m := Manager{User{1, "Tom"}, "Administrator"}

fmt.Println(m.ToString())

fmt.Println(m.User.ToString())
}

评论