go语言实现接口,接受者应该是传值还是传引用

Python011

go语言实现接口,接受者应该是传值还是传引用,第1张

vi. 走;达到;运转;趋于 n. 去;进行;尝试 vt. 忍受;出产;以…打赌 [复数 goes 第三人称单数 goes 过去式 went 过去分词 gone 现在分词 going]

go语言没有面向对象的特性,也没有类对象的概念。但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念。我们也可以声明一些方法,属于某个结构体。

Go中的方法,是一种特殊的函数,定义域struct之上(与struct关联、绑定),被称为struct的接受者(receiver)。通俗的讲,方法就是有接收者的函数。

语法格式如下:

mytype:定义一个结构体

recv:接受该方法的结构体(receiver)

my_method:方法名称

para:参数列表

return_type:返回值类型

从语法格式可以看出,一个方法和一个函数非常相似,多了一个接受类型。

实例

运行结果

下面定义一个结构体类型和该类型的一个方法:

复制代码代码如下:

type User struct {

Name string

Email string

}

func (u User) Notify() error

首先我们定义了一个叫做 User 的结构体类型,然后定义了一个该类型的方法叫做 Notify,该方法的接受者是一个 User 类型的值。要调用 Notify 方法我们需要一个 User 类型的值或者指针:

复制代码代码如下:

// User 类型的值可以调用接受者是值的方法

damon := User{"AriesDevil", "[email protected]"}

damon.Notify()

// User 类型的指针同样可以调用接受者是值的方法

alimon := &User{"A-limon", "[email protected]"}

alimon.Notify()