Golang Go语言中的让人迷惑的 interface

Golang Go语言中的让人迷惑的 interface

golang 里面有用interface定义接口的,而这个接口似乎并不是其它语言所定义的接口比如:Java python 一个个含义,我在网上看了一个示例代码:

package main

import (
	"fmt"
)

type Phone interface {
	call()
}

type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
	fmt.Println("I am Nokia, I can call you!")
}

type IPhone struct {
}

func (iPhone IPhone) call() {
	fmt.Println("I am iPhone, I can call you!")
}

func main() {
	var phone Phone

	phone = new(NokiaPhone)
	phone.call()

	phone = new(IPhone)
	phone.call()

}

为什么能用struct完成组合继承,还需要用interface呢?


更多关于Golang Go语言中的让人迷惑的 interface的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

这个例子,不是为了演示继承。

更多关于Golang Go语言中的让人迷惑的 interface的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Duck typing 了解下

golang 的 interface 与 java 的作用非常类似。本质上是为了实现多态特性而存在的。还和 cpp 的虚函数是一样的目标。此例子并没有显示出 go 的接口的用途。

这个是接口来做多态,但是一般用在函数参数或者成员变量里面, 不会有人真的在 main 里面 var 一个接口。
Go 的嵌套也算不上是完整的继承,只是把组合的成员变量和函数换了个变量空间释放了

python 有 duck typing 的吧

在Golang(Go语言)中,interface确实是一个强大但可能让人初学者感到迷惑的概念。不过,一旦你理解了它的设计哲学和用法,就会发现它极大地增强了代码的灵活性和可维护性。

首先,interface在Go中是一种类型,它规定了一组方法签名,但不实现这些方法。一个类型只要实现了interface中声明的所有方法,它就隐式地实现了该interface,无需显式声明。这种设计使得interface成为实现多态性和抽象的一种非常轻量级的方式。

对于初学者来说,可能会感到迷惑的是,Go中的interface是隐式实现的,这与一些其他编程语言(如Java)中需要显式实现接口的方式不同。此外,Go的interface还可以是空接口(interface{}),它可以表示任何类型的值,这在处理未知类型或需要高度灵活性的场景下非常有用。

为了更好地理解和使用interface,建议多阅读Go的官方文档和相关的教程,特别是那些涉及多态、抽象和数据类型转换的部分。此外,通过编写实际代码来尝试和体验interface的用法也是非常重要的。

总的来说,虽然Go中的interface可能初看起来有些迷惑,但一旦你掌握了它的用法,就会发现它是编写灵活、可维护代码的关键工具之一。通过不断实践和学习,你一定能够熟练运用Go的interface来构建高质量的软件。

回到顶部