Is it possible to modify json serialization and deserialization so that a struct like this:
type Foo struct {
A int64
B uint64
// and other stuff with int64 and uint64 and there's a lot of struct that are like this
}
x := Foo{A: 1234567890987654, B: 987654321012345678}
byt, err := json.Marshal(x)
fmt.Println(err)
fmt.Println(string(byt))
// 9223372036854775808 9223372036854775808
err = json.Unmarshal([]byte(`{"A":"12345678901234567", "B":"98765432101234567"}`), &x)
// ^ must be quoted since javascript can't represent those values properly (2^53)
// ^ json: cannot unmarshal string into Go struct field Foo.A of type int64
fmt.Println(err)
fmt.Printf("%#v\n", x)
// main.Foo{A:1234567890987654, B:0xdb4da5f44d20b4e}
https://play.golang.org/p/dHN-FcJ7p-N
So that It could receive json string but parsed as int64/uint64, and can deserialize int64/uint64 as json string without have to modify the struct or struct tag at all
interface{}type and then use a type switch... if it is detected as string you cast it to string and then usestrings.ParseInt()if it isn't then you can take another route.