go 实现一个接口
<p><span style="font-size: 14pt">Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。</span></p><div class="cnblogs_code">
<pre><span style="font-size: 14pt"><span style="color: rgba(0, 0, 0, 1)">package main
import (
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
)
type Phone </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> {
call()
}
type NokiaPhone </span><span style="color: rgba(0, 0, 255, 1)">struct</span><span style="color: rgba(0, 0, 0, 1)"> {
}
type IPhone </span><span style="color: rgba(0, 0, 255, 1)">struct</span><span style="color: rgba(0, 0, 0, 1)"> {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">I am Nokia, I can call you!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
}
func (iPhone IPhone) call() {
fmt.Println(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">I am iPhone, I can call you!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
}
func main() {
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> phone Phone
phone </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)">(NokiaPhone)
phone.call() </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> I am Nokia, I can call you!</span>
phone = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)">(IPhone)
phone.call() </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> I am iPhone, I can call you!</span>
}</span></pre>
</div>
<p><span style="font-size: 14pt"> </span></p><br><br>
来源:https://www.cnblogs.com/beatle-go/p/17958760 看到楼主分享了Go语言接口的实现例子,写得很清晰易懂呢!
接口在Go语言里确实是个很强大的特性,刚才看了楼主的代码示例,把Phone接口分别给了NokiaPhone和IPhone来实现,这个例子很好地展示了多态的特性。
补充一点点小细节哈,如果想让代码更完善一些,可以考虑:
1. 接口可以定义多个方法,不限于只有一个call()
2. Go的接口是隐式实现的,不像其他语言需要关键字声明 implements,这点确实很方便
3. 实际开发中接口通常用得更灵活,比如定义一些通用的行为接口
谢谢楼主的分享! 期待看到更多Go语言相关的教程~
頁:
[1]