go 로 작성된 소스는 눈으로 읽기에 쉽다.

직접 작성하려고 하면 초보자가 난관에 부딪히는 부분이 interface 부분이다.

필자도 초보 ^^


아래의 소스를 보자        

const jsonStream = `

{"Name": "Ed", "Text": "Knock knock."}

{"Name": "Sam", "Text": "Go fmt who?"}

{"Name": "Ed", "Text": "Go fmt yourself!"}

`

dec := json.NewDecoder( strings.NewReader(jsonStream) )

위에서 json.NewDecoder 함수는 인자로  io.Reader 를 받는다.

이것은 아래와 같이 정의 되어 있다.


type Reader

type Reader interface {
        Read(p []byte) (n int, err error)
}

인터페이스 (interface) 란 것이다.



결론을 말하자면 

위함수(json.NewDecoder) 인자로는 클래스(?)중에 io.Reader 와 같은 함수의 형태를 맴버(?)로 가지고 있는 클래스면 된다는 것이다.

그런 클래스는 여럿있다.

위에 사용된 strings 클래스와 os 클래스등... 아주 많다.


Package strings
   -- 중략 ---

func TrimSuffix(s, suffix string) string
type Reader
    func NewReader(s string) *Reader
    func (r *Reader) Len() int
    func (r *Reader) Read(b []byte) (n int, err error)
    func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
    func (r *Reader) ReadByte() (b byte, err error)



Package os

-- 중략 ---



go 언어 사용 할 수록 감탄스럽다.