52 lines
969 B
Go
52 lines
969 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type Repository interface {
|
|
Save(user *User) error
|
|
}
|
|
|
|
type User struct {
|
|
firstName string
|
|
lastName string
|
|
repository Repository
|
|
}
|
|
|
|
func NewUser(firstName string, lastName string, repository Repository) *User {
|
|
return &User{
|
|
firstName: firstName,
|
|
lastName: lastName,
|
|
repository: repository,
|
|
}
|
|
}
|
|
|
|
func (u User) Save() {
|
|
u.repository.Save(&u)
|
|
}
|
|
|
|
type DbRepository struct {
|
|
DbName string
|
|
}
|
|
|
|
func (r DbRepository) Save(user *User) error {
|
|
fmt.Printf("Saving %s %s to DB name %s...\n", user.firstName, user.lastName, r.DbName)
|
|
return nil
|
|
}
|
|
|
|
type ApiRepository struct {
|
|
Url string
|
|
}
|
|
|
|
func (r ApiRepository) Save(user *User) error {
|
|
fmt.Printf("Saving %s %s to API url %s...\n", user.firstName, user.lastName, r.Url)
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
pero := NewUser("Pero", "Perić", &DbRepository{DbName: "pero_db"})
|
|
pero.Save()
|
|
|
|
mirko := NewUser("Mirko", "Mirković", &ApiRepository{Url: "http://pero.com"})
|
|
mirko.Save()
|
|
}
|