我想问下关于interface 的问题
Go 的实现类是不是不会强制 实现类 实现 接口中的所有方法?
可以看到 我下面的方法 GoPragrammer 中只实现了 Programmer 中的writeCode 方法, 并没有实现 studyCode,
但是GoProgrammer 中这个类是没有报错, 是可以继续执行的.
1. 那么我的理解就是GoPragrammer 中并不属于 Programmer的实现类 只有当GoPragrammer 实现了 studyCode 的时候 才算 实现类
那么问题来了, 那go的接口意义在哪? 反正没有强制实现,那自己的类完全可以自己玩啊.
```
type Code struct {
code string
}
//定义一个接口
type Programmer interface {
//定义接口的方法
writeCode() Code
studyCode() Code
}
type GoPragrammer struct {
}
func (p *GoPragrammer) writeCode() Code {
code := Code{
code: "Go",
}
return code
}
func TestInterface(t *testing.T) {
goPragrammer := new(GoPragrammer)
t.Log(goPragrammer.writeCode().code)
}
```
很简单嘛, 我给出的例子是通过struct创建接口的实例, 所以编译器要确保该struct必须实现这个接口所有的方法才能被成功创建出来.不然你如果运行时调用了struct没实现的接口那时候再报错panic不是很难看么.
楼主自己的方法, 只通过struct创建一个struct实例, 所以这里编译器根本不会管这个实例实现了什么方法, 肯定毫无问题.
#4
更多评论
晕, 这个问题很奇特,
你为啥不试试定义成
```go
var goPragrammer Programmer
goPragrammer = new(GoPragrammer)
```
看看会发生什么?
#1
golang没有类。
接口这个概念也不是golang独有的
接口的意义在于提供给别人来使用,让接受数据的一方不需要知道传入参数的具体类型就能进行操作。
#2