我有一个由几个结构实现的接口。在我的一种方法中,我基于给定的字符串实例化结构,然后将 json 解析为定义的结构。为此,我实现了 UnmarshalJSON,但它从未被调用过。
界面:
type vehicle interface {
vehicleType() string
numberOfWheels() int
EngineType() string
}
实现接口的两个结构:
type truck struct {
loadCapacity int
capacityUnits string
}
func (t truck) vehicleType() string {
return "Truck"
}
func (t truck) numberOfWheels() int {
return 6
}
func (t truck) EngineType() string {
return "Gasoline"
}
func (t *truck) UnmarshalJSON(data []byte) error {
fmt.Println("Here in custom unmarshal")
return nil
}
// -------------------------------------------
type ev struct {
capacityInKWh int
}
func (e ev) vehicleType() string {
return "Electric Vehicle"
}
func (e ev) numberOfWheels() int {
return 4
}
func (e ev) EngineType() string {
return "Electric"
}
func (e ev) Capacity() int {
return e.capacityInKWh
}
请注意,我的truck
结构还实现了自定义 UnmarshalJSON。
现在,我主要尝试执行以下操作:
func main() {
jsonData := []byte(`{"loadCapacity": 1000, "capacityUnits": "lb"}`)
vehicleType := "truck"
processVehicle(vehicleType, jsonData)
}
func processVehicle(vehicleType string, data []byte) {
var myVehicle vehicle
fmt.Println("Processing vehicle...")
switch vehicleType {
case "truck":
myVehicle = truck{}
}
err := json.Unmarshal(data, &myVehicle)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(myVehicle)
}
但我收到以下错误:
json:无法将对象解组为 main.vehicle 类型的 Go 值
UnmarshalJSON
我知道在实现中没有实际的主体,truck
但我希望至少可以打印消息。
我究竟做错了什么?