【Duke】Go语言的相关接口 014 - PingPongGooo/GoFoundation GitHub Wiki
Go的接口,和其他编程语言的接口有很大的区别
接口与依赖
Java中的接口
Programmer.java
public interface Programmer{
String WriteCodes();
}
GoProgrammer.java
public class GoProgrammer implements Programmer{
@Override
public String WriteCodes(){
return "dd"
}
}
Task.java
public class Task{
public static void main(String[] args){
Programmer prog = new GoProgrammer();
......
}
}
可以发现。 三个东西根本分不开。 依赖严重
Duck Type 式接口实现
接口定义
type Programmer interface{
WriteHelloWorld()code
}
接口实现
type Goprogrammer struct{
}
// 把 WriteHelloWorld 方法 绑定到 p* GoProgrammer 结构上
func (p* GoProgrammer) WriteHelloWorld()code{
return "hello world"
}
package _interface
import "testing"
type Programmer interface {
WriteHelloWorld() string
}
type GoProgrammer struct { // 没有 使用implement 去和 programmer 绑定.
}
func (g *GoProgrammer) WriteHelloWorld() string{ // 方法签名看起来是一样的。 就是接口实现。 duck type
return "Hello world"
}
func TestClient(t *testing.T) {
var p Programmer
p = new(GoProgrammer)
t.Log(p.WriteHelloWorld())
}
Go 接口
与其他主要编程语言的差异
1. 接口为非入侵性,实现不依赖于接口定义
2. 所以接口的定义可以包含在接口使用者包内, 不相java需要一个 专门用于接口定义的 package 不会有循环依赖。
接口变量
var prog Coder = &GoProgrammer{}
类型 type GoProgrammer struct{}
数据 &GoProgrammer{}
自定义类型
1. type IntConvertionFn func(n int) int
2. type MyPoint int