Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Go getting failed field from UnmarshalTypeError

Tags:

go

According to GO stdlib, there is an error returned when JSON property type is different than struct's one. Here is definition:

// An UnmarshalTypeError describes a JSON value that was
// not appropriate for a value of a specific Go type.
type UnmarshalTypeError struct {
    Value  string       // description of JSON value - "bool", "array", "number -5"
    Type   reflect.Type // type of Go value it could not be assigned to
    Offset int64        // error occurred after reading Offset bytes
    Struct string       // name of the struct type containing the field
    Field  string       // name of the field holding the Go value
}

Now, I'm trying to simulate a type conversion fail, by having an string field inside struct and providing int to this one.

import (
    "encoding/json"
    "fmt"
)

type Sample struct {
    StringProp string `json:"a_string"`
}

func main(){
    jsonString := `{ "a_string" : 1 }`
    s := Sample{}
    err := json.Unmarshal([]byte(jsonString), &s)
    if err != nil {
        typeErr := err.(*json.UnmarshalTypeError)
        fmt.Print(typeErr.Field)
    }
}

But unfortunately, the error doesn't have any values for "Struct" or "Field" property. What are these properties for? Is there a way to detect at which property unmarshal failed?

like image 946
Maxian Nicu Avatar asked Mar 05 '26 15:03

Maxian Nicu


1 Answers

Issue was reproduced only on my local environment. After removing golang(I had 3 version installed with brew) and installing go once again, it started to work as expected. Struct and Field are populating again.

Also, there is an issue on github GO repository

like image 126
Maxian Nicu Avatar answered Mar 08 '26 08:03

Maxian Nicu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!