package main
import "fmt"
import (
"encoding/json"
)
type ErrorJson struct {
Code int `json:"code"`
Message string `json:"message"`
}
func (errJson ErrorJson) Error() string{
return errJson.Message
}
func (errJson ErrorJson)MarshalJSON() ([]byte, error){
jsonStr, err := json.Marshal(errJson)
if err != nil{
fmt.Println(err)
return nil, err
}
return jsonStr, nil
}
func main(){
json := ErrorJson{Code:0, Message:"success"}
str, err := json.MarshalJSON()
if err != nil{
fmt.Println(err)
}
fmt.Println(str)
}
json.Marshal(errJson)会调用errJson.MarshalJSON()方法,MarshalJSON()又会调用json.Marshal(errJson),造成死递归,导致栈溢出
修改一下:
```go
package main
import (
"encoding/json"
"fmt"
)
type ErrorJson struct {
Code int `json:"code"`
Message string `json:"message"`
}
func (errJson ErrorJson) Error() string {
return errJson.Message
}
func main() {
errJson := ErrorJson{Code: 0, Message: "success"}
str, err := json.Marshal(errJson)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(str))
}
```
#1