详解golang中的method
什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。
method的语法:
func(rReceiver)funcName(parameters)(result)
receiver可以看作是method的第一个参数,method并且支持继承和重写。
- Go中虽没有class,但依旧有method
- 通过显示说明receiver来实现与某个类型的结合
- 只能为同一个包中的类型定义方法
- receiver可以是类型的值或者指针
- 不存在方法重载
- 可以使用值或指针来调用方法,编译器会自动完成转换
- 从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第一个参数(MethodValuevs.MethodExpression)
- 如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法
- 类型别名不会拥有底层类型所附带的方法
- 方法可以调用结构中的非公开字段
goversiongo1.12
/** *什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。 *method的语法:func(rReceiver)funcName(parameters)(result)。 *receiver可以看作是method的第一个参数,method并且支持继承和重写。 */ packagemain import( "fmt" ) typeHumanstruct{ namestring ageint } //字段继承 typeStudentstruct{ Human//匿名字段 schoolstring } typeEmployeestruct{ Human//匿名字段 companystring } //函数的另外一种形态:method,语法:func(rReceiver)funcName(parameters)(result) //method当作struct的字段使用 //receiver可以看作是method的第一个参数 //指针作为receiver(接收者)和普通类型作为receiver(接收者)的区别是指针会对实例对象的内容发生操作, //普通类型只是对副本进行操作 //method也可以继承,下面是一个匿名字段实现的method,包含这个匿名字段的struct也能调用这个method func(h*Human)Info(){ //method里面可以访问receiver(接收者)的字段 fmt.Printf("Iam%s,%dyearsold\n",h.name,h.age) } //method重写,重写匿名字段的method //虽然method的名字一样,但是receiver(接收者)不一样,那么method就不一样 func(s*Student)Info(){ fmt.Printf("Iam%s,%dyearsold,Iamastudentat%s\n",s.name,s.age,s.school) } func(e*Employee)Info(){ fmt.Printf("Iam%s,%dyearsold,Iamaemployeeat%s\n",e.name,e.age,e.company) } funcmain(){ s1:=Student{Human{"Jack",20},"tsinghua"} e1:=Employee{Human{"Lucy",26},"Google"} //调用method通过.访问,就像struct访问字段一样 s1.Info() e1.Info() }
以上就是详解golang中的method的详细内容,更多关于golang中的method的资料请关注毛票票其它相关文章!