最近正好试着把自己写的一个Python工具用Golang重写一遍来做个比较,顺便评估一下Golang这个语言。结果遇到一个接口冲突导致Stack Overflow的问题。以下是示例代码
package main
import (
"encoding/json"
"fmt"
)
type IJSON interface {
MarshalJSON() ([]byte, error) // This interface signature is the same as "encoding/json/Marshaler"
}
type Student struct {
Name string `json:"name"`
Age int `json:"age"`
}
func (s *Student) MarshalJSON() ([]byte, error) {
return json.Marshal(s)
}
func main() {
s := &Student{"James", 12}
data, err := s.MarshalJSON()
if err != nil {
panic(err)
}
fmt.Printf("%s", data)
}
json.MarshalMarshaler
// Marshaler is the interface implemented by types that
// can marshal themselves into valid JSON.
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
MarshalJSON
一直以来就对Golang的隐式接口实现没有好感,完全不知道一个类型实现了什么接口,接口与接口之间有什么关系。