前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Go语言基础—面向对象(方法)(go语言面向对象编程)

qiguaw 2024-09-18 23:17:42 资源文章 13 ℃ 0 评论

方法

  • 方法和函数语法比较像,区别是函数属于包,通过包调用函数;而方法属于结构体,通过结构体变量调用
  • 默认是函数,隶属于包,所以需要添加标识,告诉编译器这个方法属于哪个结构体

调用方法时,就把调用者,赋值给接收者(下面的变量名就是接收者)

func (变量名 结构体类型)  方法名(参数列表)  返回值列表{
    //方法体
}


  • Go语言中已经有函数了,又添加了对方法的支持,主要是保证Go语言是面向对象的,Go语言官方对 面向对象的解释
  • 翻译如下:

虽然面向对象没有统一的定义,但是对于我们来说对象仅仅是一个有着方法的值或变量,而方法就是一个属于特定类型的函数


示例

  • 定义一个People类型结构体,再对People结构体定一个run()方法
type People struct {
   Name string //姓名
   Age int    //年龄
   Weight float64 //体重,单位斤
}

func (p People) run() {
   fmt.Println(p.Name, "正在跑步")
}

func main() {
   peo := People{"张三", 17, 70}
   peo.run()
}


  • 如果设定需求,在每次跑步和体重都减少0.1斤,上面代码就需要修改了,因为结构体是值类型,修改方法中结构体变量p的值,主函数中peo的值不会改变,因为传递的时值副本,所以修改方法中结构体类型为结构体指针类型就可以完成设定需求

简言之,如果需要修改结构体属性,则需要修改方法中的结构体为指针类型。

type People struct {
   Name string //姓名
   Weight float64 //体重,单位斤
}

func (p *People) run() {
   fmt.Println(p.Name, "正在跑步,体重为:",p.Weight) //输出:张三 正在跑步,体重为: 100
   p.Weight -=1
}

func main() {
   peo := People{"张三", 100}
   peo.run()
   fmt.Println("跑步后的体重是:",peo.Weight) //跑步后的体重是: 99
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表