Я хочу использовать пользовательский тип, который не экспортируется, и определить интерфейс для его использования.Пользовательский тип будет реализовывать интерфейс, и все работает нормально, за исключением демаршалинга из JSON.
Я создал пример, чтобы объяснить его лучше:
type (
Value interface {
Set(k, v string)
}
value map[string]string
)
func New() Value {
return value{}
}
func (val value) Set(k, v string) {
val[k] = v
}
Этот подход не обеспечит прямой доступ ксопоставить и принудительно использовать функцию New () для создания объектов типа «Значение».
При попытке демонтировать объект, созданный с помощью New (), я получаю сообщение об ошибке:
Failed to unmarshal value json: cannot unmarshal object into Go value of type main.Value
Это можно исправить, заставив New () возвращать «значение» вместо «Значение», но все еще будет проблемой при попытке демонтажа такого объекта, как:
Storage struct {
Val Value `json:"val"`
}
Есть предложения?Реализация Unmarshaler не помогает в этом случае.Я создаю фрагмент кода с этим примером: https://play.golang.org/p/IEalgBCsTVR