(18条消息) Go语言自学系列 | golang方法_COCOgsta的博客-CSDN博客



Go语言自学系列 | golang方法

COCOgsta 于 2022-04-22 21:35:32 发布 32 收藏
分类专栏: 视频学习笔记 文章标签: golang

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


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

go预研方法的语法

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

语法格式如下:

  1. 1
    type mytype struct{}
  2. 2
  3. 3
    func (recv mytype) my_method(para) retrun_type {}
  4. 4
    func (recv *mytype) my_method(para) return_type {}

mytype:定义一个结构体

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

my_method:方法名称

para:参数列表

return_type:返回值类型

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

实例

  1. 1
    package main
  2. 2
  3. 3
    import "fmt"
  4. 4
  5. 5
    type Person struct {
  6. 6
    name string
  7. 7
    }
  8. 8
  9. 9
    func (per Person) eat() {
  10. 10
    fmt.Println(per.name + " eating....")
  11. 11
    }
  12. 12
  13. 13
    func (per Person) sleep() {
  14. 14
    fmt.Println(per.name + " sleep....")
  15. 15
    }
  16. 16
  17. 17
    func main() {
  18. 18
    var per Person
  19. 19
    per.name = "tom"
  20. 20
    per.eat()
  21. 21
    per.sleep()
  22. 22
    }

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    tom eating....
  3. 3
    tom sleep....

go语言方法的注意事项

  1. 方法的receiver type并非一定要是struct类型,type定义的类型别名、slice、map、channel、func类型等都可以。
  2. struct结合它的方法就等价于面向对象中的类。只不过struct可以和它的方法分开,并非一定要属于同一个文件,但必须属于同一个包。
  3. 方法有两种接收类型:(T Type)和(T *Type),它们之间有区别。
  4. 方法就是函数,所以Go中没有方法重载(overload)的说法,也就是说同一个类型中的所有方法名必须都唯一。
  5. 如果receiver是一个指针类型,则会自动解除引用。
  6. 方法和type是分开的,意味着实例的行为(behavior)和数据存储(field)是分开的,但是它们通过receiver建立起关联关系。

yg9538 2022年7月22日 22:48 570 收藏文档