Golang学习笔记(十):方法
传统编程语言,如Java,C++或PHP,对面向对象都提供了支持,一般的面向对象编程,主要是定义一个个抽象的类,然后再通过实例化一个个的对象,但是,Go语言虽然提供了面向对象的支持,但与传统语言并不相同,这可能是许多从其他编程语言转过来的程序员不太应Go语言的原因。
下面来讲讲Go对面向对象的支持有什么不同。
Go的面向对象
Go语言的面向对象定义,与其他语言不同。
传统编程语言是,每个对象,有自己的属性和方法,对象通过调用方法,来达到修改属性,改变对象状态。
而在Go语言中,每个类型或变量,都附加一些方法,然后通过调用方法来执行程序。
方法的声明
如何给类型声明一个方法呢?方法的形式与函数类似,只不过函数的func与函数之间加一个该类型变量,如下所示:
const male = 1
const female = 2
type User struct {
Uid int
UserName string
Sex int //1:男,2:女
}
func (u User)GetSex()(sex int) {
return u.Sex
}
在上面的例子中,变量u
称为方法的接收器(receiver),也就是调用该方法的对象,与传统编程使用self或this表示调用对象不同,Go语言可以自定义接收器的名称,不过一般建议使用简称名称,如这里使用u
。
u := Uesr{Uid:10,UserName:"test",Sex:male}
fmt.Println(u.GetSex(female))//输出1
u.Sex = female
fmt.Println(u.GetSex(female))//输出2
在同一个包中,我们不能定义相同名称的函数,但方法不同,不同的类型变量可以定义相同的方法名,如下代码所示,我们定义的Admin结构也附加了GetSex()方法
type Admin struct {
Id
Name
Sex
}
func (a *Admin)GetSex(sex int) {
return u.Sex
}
还要注意的是,结构体在定义方法名时,方法名与结构的属性字段不能相同。
ft_authoradmin ft_create_time2019-08-03 17:06
ft_update_time2019-08-03 17:07
ft_update_time2019-08-03 17:07