vendredi 6 mai 2022

golang: BaseRepository usage with different struct return type [duplicate]

I have the following code with two repositories that have the same functionality but different return types. I want to call the findAll method from the BaseRepository to prevent writing the same logic for fetching entries multiple times. I want to keep different return types. Is this possible?

Currently I get the following error (in the UserRepository): // Error: cannot use r.baseRepository.FindAll(user) (value of type []interface{}) as []User

I understand the problem, but is there an easy solution for that? Maybe I have to use another approach?

package main

type Address struct {
    street string
}

type User struct {
    Firstname string
    Lastname  string
}

// BaseRepository
type BaseRepository struct{}

func (r *BaseRepository) FindAll(dest interface{}) []interface{} {
    // Return []Address or []User
    return []interface{}{}
}

// UserRepository
type UserRepository struct {
    baseRepository *BaseRepository
}

func (r *UserRepository) FindAll() []User {
    var user User
    return r.baseRepository.FindAll(user) // Error: cannot use r.baseRepository.FindAll(user) (value of type []interface{}) as []User value in return statement
}

// AddressRepoistory
type AddressRepository struct {
    baseRepository *BaseRepository
}

func (r *AddressRepository) FindAll() []Address {
    var address Address
    return r.baseRepository.FindAll(address)  // Error: cannot use r.baseRepository.FindAll(address) (value of type []interface{}) as []Address value in return statement
}

func main() {
}

Aucun commentaire:

Enregistrer un commentaire