8.golang 创建方法和接口

package main

import (
"fmt"
"math"
)

type Movie struct {
Name string
Rating float32
}

/*
创建方法: 创建方法 跟创建函数差不多,只是在func后面多了一个接受者,这个接受者可以被结构体引用,形成一种结构体的方法集
并且使任何关联到结构体的方法,都能使用他拥有的方法集中的方法,这样就能形成封装功能和创建库代码的有效方法
通过这种方法,我们可以理解成 一个类下面(golang中的结构体),所有方法(关联到这个结构体的所有方法)
接收者参数声明为指针引用 和 值引用的差别(就是在接受者中,是否用* 星号符): 如果需要修改原始结构体,就使用指针;如果需要操作结构体,但不想修改原始结构体,就是用值
方法声明方式: type ... struct{}

接口:接口指定了一个方法集,这是实现模块化的强大方式。可以将接口视为方法集的蓝本,它描述了方法集中的所有方法,但没有实现他们。
接口多种方式的实现,就想多态。多态就是多种形式,它让接口能够有多种实现。
接口声明方式: type ... interface{}

函数和方法的不同:
方法多了一个指定接受者的参数,能够对数据类型调用方法,从而提高代码重用性和模块化程度
接口的实现尅包含接口中没有的方法,可以在接口的实现中添加额外的方法,但这仅适用于结构体,而不适用于接口。

*/

type Sphere struct {
Radius float64
}

func (s *Sphere) jiOne() float64 { //圆的面积
return float64(4)*math.Pi + (s.Radius * s.Radius)
}

func (s *Sphere) jiTwo() float64 { //圆的体积
radiusCubed := s.Radius * s.Radius * s.Radius
return (float64(4)/float64(3))*math.Pi + radiusCubed
}

//定义一个接口 :功能是PowerOn ,接口描述了方法PowerOn的函数签名:不接受任何参数且返回一种错误类型
type Robot interface {
PowerOn() error
}

//接口的实现,接口也是一种类型,可作为参数传递给函数
func (a *Sphere) PowerOn() error {
if true {
t := err
return t
}
}

func Boot(r Robot) error {
return r.PowerOn()
}

func main() {
s := Sphere{Radius: 5}
fmt.Println(s.jiOne())
fmt.Println(s.jiTwo())
}

//这个叫方法申明
func (m *Movie) summary() string { //(m *Movie) func后面多了一个参数---接受者,方法接受者是一种类型,这里指向结构体Movie的指针
//summary 是方法名,参数以及放回类型
var a string = "abc"
return a
}

func summary2(m *Movie) string { //此处 函数summary2 和方法 summary 声明等价。
a := m.Name
return a
}

猜你喜欢

转载自www.cnblogs.com/iifeng/p/11488921.html