如何在golang中实现接口?

pexxcrt2  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(107)

我在Go中的一个项目中有3个文件:
Cat.go

package entities

type Cat struct {
    Length              int
    Origin              string
    Image_link          string
    Family_friendly     int
    Shedding            int
    General_health      int
    Playfulness         int
    Children_friendly   int
    Grooming            int
    Intelligence        int
    Other_pets_friendly int
    Min_weight          int
    Max_weight          int
    Min_life_expectancy int
    Max_life_expectancy int
    Name                string
}

cat.repository.go

package src

import entities "src/domain/entitites"

type CatRepository interface {
    ListCats() []entities.Cat
}

cat.repository.impl.go

package repositories

import (
    entities "src/domain/entitites"
    nir "src/domain/repositories"
)

func (cat entities.Cat) ListCats() []entities.Cat {

}

我试图在第三个文件上实现接口,但编译器说“不能在非本地类型实体上定义新方法。Cat”
有人能告诉我怎么解决吗?

s3fp2yjn

s3fp2yjn1#

看起来你试图在另一个包中向结构体Cat添加方法。如果您的目的是重用Cat结构作为同一实体的存储库,则应该在Cat.go文件中添加方法。
如果你想把仓库从cat结构中分离出来,你可能应该声明一个新的结构体CatRepositoryImpl,并向这个结构体添加一个方法。此外,您可以将该结构体放入cat.repository文件夹中。

utugiqy6

utugiqy62#

对于你所问的,你可以创建一个单独的repo,然后像下面这样使用该repo实现方法,

package repositories
...

type repo struct {
 cat entities.Cat
}

func (r *repo) ListCats() []entities.Cat {
  // now you can access cat using
  print(r.cat)
}

相关问题