Итак, дженериков нет, пытаюсь решить тупейшую проблему.
Есть структуры
type User struct {
ID int
Name string
}
type Admin struct {
User
Level int
}
И еще структур типа
Admin
много, все они включают в себя
User
Теперь хочу сохранять их в базу, в которой всё в json. Задача: написать один раз метод/функцию сохранения, а не дублировать код для каждого типа.
То есть хочу иметь одну функцию, которая будет:
1. Маршалить структуру со всеми полями. То есть User превратится в {id: 1, name: "zhora"}, а Admin превратится в {id: 1, name: "gena", level: 2}
2. Сохранить этот json в базу по ID.
func (i *User) Save() {
data, err := json.Marshal(i)
check(err)
if i.ID == 0 {
_, err = app.DB.Exec(`INSERT INTO users(data) VALUES ($1) `, string(data))
} else {
_, err = app.DB.Exec(`UPDATE users SET data = $1 WHERE id=$2`, string(data), i.ID)
}
check(err)
}
Сейчас приходится для каждого нового типа тупо копировать целиком функцию, изменяя только тип ресивера. Можно ли этого избежать?