Это функция json unmarshal
Если вы используете interface{}
в качестве декодера, json-объект по умолчанию для interface{}
будет map[string]interface{}
Вы можете увидеть это здесь:
https://godoc.org/encoding/json#Unmarshal
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
Таким образом, в t := policy.Parameter.(type)
значение t
равно map[string]interface{}
Для решения вашей проблемы вы можете попытаться определить другое поле, чтобы различать CatParameter
или DogParameter
Может быть:
type Policy struct {
Name string `json:"name"`
Parameter Parameter `json:"parameter"`
}
type Parameter struct {
Name string `json:"name"` // cat or dog
Percent int `json:"percent,omitempty"`
Duration int `json:"duration,omitempty"`
Operation string `json:"operation,omitempty"`
}