2014-04-12 4 views
1

나는 문서를 읽고 있는데 왜 반환 유형이 실제로 error 일 때 포인터 (&errorString{text})가 반환되어야하는지 이해하지 못합니까?반환 형식이 실제로 오류 일 때 포인터를 반환해야하는 이유는 무엇입니까?

내 이해는 error이고 인터페이스는 errorString이므로 인터페이스가 구현되어 있으므로 errorString도 반환해도 괜찮습니다 (사실은 그렇지 않습니다).

// New returns an error that formats as the given text. 
func New(text string) error { 
    return &errorString{text} 
} 

Errorstring이 구현

// errorString is a trivial implementation of error. 
type errorString struct { 
    s string 
} 

func (e *errorString) Error() string { 
    return e.s 
} 

답변

6

errorString에 대한 error 인터페이스 포인터 (func (e *errorString) Error())에 대해 구현되어 있기 때문에이 다음과 같이 구현 된 경우, 직접 값을 반환합니다 :

func (e errorString) Error() string { 
    return e.s 
} 
+0

감사합니다 , Arjan. 네가 한 말처럼 작동한다. 내가 알아 차 렸던 한 가지는 당신이 말한대로 구현 되었다면 직접 포인터를 반환하거나 포인터 작업을 반환한다는 것입니다. 왜 그런지 알고 있습니까? – Mingyu

+0

형식에 대한 메서드 집합이 정의되는 방법은 다음과 같습니다. http://golang.org/ref/spec#Method_sets – Arjan

+0

* T 형식은 * T 또는 T로 정의 된 수신기를 사용하여 메서드를 호출 할 수 있습니다. – Arjan

관련 문제