如何将结构体和实现接口分2个文件实现?

taatcc · · 2558 次点击
在Go语言中我们无法直接对在其他包中定义的结构体添加方法,如果你要分成两个文件,请放到同一目录下。
#1
更多评论
Soga,因为实现接口需要接收一个结构体,利用同目录,同包,两个文件中结构体共用 的思路 吗?咋给java不一样呢。java entiy文件,实现接口文件,是能放不同目录的。被搞晕了
#2
我不太明白你的意思,我就说说我的理解把,首先别把其他语言特性带入到 Go,最好还是把 Go 语言基础过一遍,这个问题相关有 **包和文件**、**接口** 两个基础知识点。 Go 语言里面,一个目录就是一个包,包内的所有 `.go` 文件都可以相互使用,也就是说你可以在 *a.go* 文件里定义了一个结构体,然后在 *b.go* 里面给这个结构体添加方法,因为是在同一个包里,所以是可以的。 但你问题中的描述,`Dog` 结构体定义在 *model* 目录下,那么想给 `Dog` 添加方法,你只能在 *model* 目录下的 `.go` 文件中添加,而不能放到其他目录中去实现。 另外 Go 语言中的接口是 duck typing,接口的定义和具体的实现是可以不在同一个包的,所以 `Beahavior` 放在 *interfaces* 目录下,而 `Dog` 在 *model* 目录下去实现它是可以的。这个应该很好理解把,比如我们可以在自己的项目中实现标准库里的所有接口。 ```go func (d *model.Dog) Eat(thing string ) string ``` 你代码里的 `func (d *model.Dog)` 这种肯定是错误的,这肯定是给其他包添加方法了。所有的方法必定是 `func (d *Dog)` 或者 `func(d Dog)` 两种情况之一。
#3