网站建设:上海珍岛,网页版qq空间登录,新零售型网站开发,宁德网站推广#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力#xff0c;虚度你的光阴#xff0c;每天迈出一小步#xff0c;回头时发现已经走了很远。
#x1f4d7;概念 在Go语言中#xff0c;interface 是一种重要的类型#xff0c;用于定义一组方法…
Don’t worry , just coding! 内耗与overthinking只会削弱你的精力虚度你的光阴每天迈出一小步回头时发现已经走了很远。
概念 在Go语言中interface 是一种重要的类型用于定义一组方法的集合。 任何类型只要实现了这些方法就可以被视为该接口的实现。 接口提供了一种灵活的方式来实现多态性使得不同类型可以用同一方法进行操作。 代码
package mainimport (fmtmath
)// 用type和interface关键字定义了一个geometry接口接口中包含了两个方法area()和perim()
type geometry interface {area() float64perim() float64
}// 定义结构体rect包含两个属性width, height float64类型
type rect struct {width, height float64
}
type circle struct {radius float64
}// 给结构体定义函数rect和circle是不同的结构实现不同的方法
func (r rect) area() float64 {return r.width * r.height
}
func (r rect) perim() float64 {return 2*r.width 2*r.height
}func (c circle) area() float64 {return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {return 2 * math.Pi * c.radius
}// measure()函数接受一个geometry接口类型的参数并在函数内部调用该参数的area()和perim()方法打印出对应的结果
func measure(g geometry) {fmt.Println(g)fmt.Println(g.area())fmt.Println(g.perim())
}func main() {r : rect{width: 3, height: 4}c : circle{radius: 5}measure(r)measure(c)
}理解
接口使用 type 关键字定义后跟接口名称和方法签名任何类型只要实现了接口中定义的所有方法就自动实现了该接口无需显式声明。interface是go中实现多态的方式不同的数据结构实现相同的方法 Tips小知识点
方法签名 在编程中方法签名Method Signature是指方法的名称及其参数列表的组合。它用于唯一标识一个方法并定义该方法的输入和输出。 方法签名通常包含方法名称、参数列表基本类型、结构体、interface接口、返回值可选 Example
func Add(a int, b int) int {return a b
}方法名称Add参数列表a int, b int返回值int
方法签名的重要性
唯一性在同一个作用域内方法的名称和参数列表的组合必须是唯一的。即使方法名称相同但如果参数类型或数量不同编译器也会将其视为不同的方法。类型安全方法签名帮助编译器检查方法调用时的参数类型是否匹配确保类型安全。多态性在面向对象编程中方法签名是实现多态性的基础。通过接口或基类定义方法签名可以让不同的子类实现相同的方法从而实现多态。
空接口 空接口interface{}是没有任何方法的接口表示任何类型的值。它可以用来处理不同类型的数据。 Example
//空的方法interface{}
func PrintAnything(v interface{}) {fmt.Println(v)
}func main() {PrintAnything(Hello, World!)//stringPrintAnything(123)//intPrintAnything(true)//boolean
}接口的嵌套 接口可以嵌套其他接口从而形成更复杂的接口。 Example
type Animal interface {Speak() string
}
//嵌套Animal接口并新增一个Play方法
//意味着任何实现 Pet 接口的类型必须同时实现 Animal 接口中的 Speak() 方法和 Pet 接口中的 Play() 方法。
type Pet interface {AnimalPlay() string
}type Dog struct{}
//dog 实现Speak()
func (d Dog) Speak() string {return Woof!
}
//dog 实现Play()
func (d Dog) Play() string {return Fetch!
}
无人扶我青云志我自踏雪至山巅。