Я выполняю программу опроса задач (восстановление незавершенной задачи из базы данных).
Задача должна удовлетворять определенному Task
интерфейсу:
type Task interface {
// Identifier returns a unique string of a task
Identifier() string
// Data should be persistent
Data() interface{}
// Execute a task
Execute()
}
Данные, хранящиеся в базе данных, удовлетворяют следующей структуре:
type Record struct {
Identifier string `json:"identifier"`
Data interface{} `json:"data"`
}
Когда запускается опросщик задач, он считывает сохраненные данные из базы данных, а затем (давайте просто пока проигнорируем обработку ошибок):
r := &Record{}
result := database.Get(key)
json.Unmarshal([]byte(result), r)
мы восстановили сохраненные данные из базы данных в r
.
Появляется проблема, что я не могу вызвать метод Execute()
, потому что r.Data
на самом деле является типом interface{}
(точнее, map[string]interface{}
), отличным от типа Task
.
Как я могу преобразовать или преобразовать r.Data
в структуру, которая удовлетворяет интерфейсу Task
, чтобы я мог успешно вызвать метод Execute()
?