best practice 같은데서 제가 직접 타입이랑 인터페이스 구현하는건 이해가되는데
막 기본패키지 io.Writer나 io.Reader, Marshaler 이런애들 구현해서 쓰는게 이해가 안되요...
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
이게 기본패키지 마샬러 인터페이스인데
제가 만든 타입을 Marshaler 인터페이스로 만들려면
제가 직접 제 타입에 맞게 MarshalJSON 함수를 만들고 로직을 구현해야 하는건가요?
가끔 제가 MarshalJSON 구현하면 기본 패키지에서 인자로 Marshaler 인터페이스를 받는 함수나 메소드가패닉뜰때가 있더라구요..
흑흑 왜이러징
패닉 났을 때 무슨 메시지가 뜨는지 올려주면 좋을텐데 당장 추측해볼 수 있는건 구현은 pointer receiver로 했는데 넘길 때 pointer가 아니라 value로 넘기면 내부에서 v.(Marshaler).MarshalJSON(...) 이렇게 호출했을 때 패닉이 일어날 수 있어
https://play.golang.org/p/HTMYfCDIacr
SayHello의 리시버 타입이 *S니까 타입 S 자체에는 Sayhello라는 함수가 없는거 아님?
SayHello 정의에서 *S S로 바꾸면 컴파일 잘 됨.
내가 하고싶은 말이 그거임. 메서드셋을 설명하는 댓글을 달았어야하나