Golang学习笔记(十):方法

https://juejin.im/post/5c88f597f265da2dca38a29d

传统编程语言,如Java,C++或PHP,对面向对象都提供了支持,一般的面向对象编程,主要是定义一个个抽象的类,然后再通过实例化一个个的对象,但是,Go语言虽然提供了面向对象的支持,但与传统语言并不相同,这可能是许多从其他编程语言转过来的程序员不太应Go语言的原因。

下面来讲讲Go对面向对象的支持有什么不同。

Go的面向对象

Go语言的面向对象定义,与其他语言不同。

传统编程语言是,每个对象,有自己的属性和方法,对象通过调用方法,来达到修改属性,改变对象状态。

而在Go语言中,每个类型或变量,都附加一些方法,然后通过调用方法来执行程序。

方法的声明

如何给类型声明一个方法呢?方法的形式与函数类似,只不过函数的func与函数之间加一个该类型变量,如下所示:

  1. const male = 1
  2. const female = 2
  3. type User struct {
  4. Uid int
  5. UserName string
  6. Sex int //1:男,2:女
  7. }
  8. func (u User)GetSex()(sex int) {
  9. return u.Sex
  10. }

在上面的例子中,变量u称为方法的接收器(receiver),也就是调用该方法的对象,与传统编程使用self或this表示调用对象不同,Go语言可以自定义接收器的名称,不过一般建议使用简称名称,如这里使用u

  1. u := Uesr{Uid:10,UserName:"test",Sex:male}
  2. fmt.Println(u.GetSex(female))//输出1
  3. u.Sex = female
  4. fmt.Println(u.GetSex(female))//输出2

在同一个包中,我们不能定义相同名称的函数,但方法不同,不同的类型变量可以定义相同的方法名,如下代码所示,我们定义的Admin结构也附加了GetSex()方法

  1. type Admin struct {
  2. Id
  3. Name
  4. Sex
  5. }
  6. func (a *Admin)GetSex(sex int) {
  7. return u.Sex
  8. }

还要注意的是,结构体在定义方法名时,方法名与结构的属性字段不能相同。

ft_authoradmin  ft_create_time2019-08-03 17:06
 ft_update_time2019-08-03 17:07