Golang入门到项目实战 | golang方法
Posted 一个热爱编程的通信人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang入门到项目实战 | golang方法相关的知识,希望对你有一定的参考价值。
go语言没有面向对象的特性,也没有类对象的概念。但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念。我们也可以声明一些方法,属于某个结构体。
go预研方法的语法
Go中的方法,是一种特殊的函数,定义域struct之上(与struct关联、绑定),被称为struct的接受者(receiver)。通俗的讲,方法就是有接收者的函数。
语法格式如下:
type mytype struct
func (recv mytype) my_method(para) retrun_type
func (recv *mytype) my_method(para) return_type
mytype:定义一个结构体
recv:接受该方法的结构体(receiver)
my_method:方法名称
para:参数列表
return_type:返回值类型
从语法格式可以看出,一个方法和一个函数非常相似,多了一个接受类型。
实例
package main
import "fmt"
type Person struct
name string
func (per Person) eat()
fmt.Println(per.name + " eating....")
func (per Person) sleep()
fmt.Println(per.name + " sleep....")
func main()
var per Person
per.name = "tom"
per.eat()
per.sleep()
运行结果
[Running] go run "d:\\SynologyDrive\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\test.go"
tom eating....
tom sleep....
go语言方法的注意事项
- 方法的receiver type并非一定要是struct类型,type定义的类型别名、slice、map、channel、func类型等都可以。
- struct结合它的方法就等价于面向对象中的类。只不过struct可以和它的方法分开,并非一定要属于同一个文件,但必须属于同一个包。
- 方法有两种接收类型:(T Type)和(T *Type),它们之间有区别。
- 方法就是函数,所以Go中没有方法重载(overload)的说法,也就是说同一个类型中的所有方法名必须都唯一。
- 如果receiver是一个指针类型,则会自动解除引用。
- 方法和type是分开的,意味着实例的行为(behavior)和数据存储(field)是分开的,但是它们通过receiver建立起关联关系。
以上是关于Golang入门到项目实战 | golang方法的主要内容,如果未能解决你的问题,请参考以下文章