package main import ( "encoding/json" "strconv" "fmt" ) type TheLong struct { Value int64 } type Test struct { Name string `json:"name"` Name2 string `json:"name2"` Name3 string `json:"name3,omitempty"` Age int32 `json:"age"` NotSer string `json:"-"` Bool bool `json:"bool"` BoolInStr bool `json:"bool_in_str,string"` Long int64 `json:"long"` Long2 TheLong `json:"long2"` } // https://www.cnblogs.com/yorkyang/p/8990570.html func (l *TheLong) MarshalJSON() (data []byte, err error) { fmt.Println("------")//?? if l != nil { data = []byte(strconv.FormatInt(l.Value, 10)) } return } func (l *TheLong) UnmarshalJSON(data []byte) error { v, err := strconv.ParseInt(string(data), 10, 64) if err != nil { return err } l.Value = v return nil } func main() { t := Test { Name: "hatter", Name2: "", Name3: "", Age: 18, NotSer: "not ser!", Bool: true, BoolInStr: true, Long: 342438204823084023, Long2: TheLong { Value: 1111111111111111111 }, } s, err := json.Marshal(t) if err != nil { fmt.Println("ERROR: ", err) return } fmt.Println("JSON: ", string(s)) }