慕标5832272
由于您FileData不是太复杂,您可以轻松地使用json.Unmarshaler界面。声明Encoding为单独的类型,并在 unmarshal 方法中设置默认值:type FileData struct { UID string `json:"uid"` Size int `json:"size"` Content string `json:content` Encoding Encoding `json:encoding` // declared as a custom type User string `json:"user"`}type Encoding string// implement the Unmarshaler interface on Encodingfunc (e *Encoding) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } if s == "" { *e = Encoding("base64") } else { *e = Encoding(s) } return nil}现在,当您使用空值对 json 进行编码时Encoding,它将被设置为base64:var data1 = []byte(`{"uid": "UID", "size": 10, "content": "CONTENT", "encoding": "ASCII", "user": "qwe"}`)var data2 = []byte(`{"uid": "UID", "size": 10, "content": "CONTENT", "encoding": "", "user": "qwe"}`)func main() { fmt.Println("Hello, playground") f := FileData{} if e := json.Unmarshal(data1, &f); e != nil { fmt.Println("Error:", e) } fmt.Println(f, f.Encoding) if e := json.Unmarshal(data2, &f); e != nil { fmt.Println("Error:", e) } fmt.Println(f, f.Encoding)}输出:{UID 10 CONTENT ASCII qwe} ASCII{UID 10 CONTENT base64 qwe} base64工作代码: https: //play.golang.org/p/y5_wBgHGJk