2017-01-26 2 views
2

나는 golang 비교적 새로운 해요, 내가 찾고 있어요 프로젝트는 패턴 이런 종류의 반복을 여러 번있다 : 나는 교체 할 경우/"캐스팅"인터페이스 기능은 golang에서 실제로 무엇을합니까?

package foo 

type Foo interface { 
    Bar() int 
} 

type foo struct { 
} 

func (f *foo) Bar() int { 
    return 42 
} 

func New() Foo { 
    // why? 
    return Foo(&foo{}) 
} 

return &foo{} 모든 것을 함께 마지막 함수의 반환 문으로 잘 작동을 나는 그것을 올바르게 이해한다면 그것은 오리 타이핑이라고 예상했다. Foo (...) 함수를 사용할 때의 요점은 무엇입니까? 유형을 함수로 사용하는 것은 int와 같은 내장 유형을 메서드가있는 유형으로 래핑 할 때 작동하는 것으로 보입니다. 저자의 의도에 대해 궁금합니다. 언어 사양으로 다루어지면 찾지 못했습니다.

답변

3

표현식 Foo (x)는 conversion입니다. *fooassignable ~ Foo이기 때문에 여기서는 변환이 필요하지 않습니다. 코드는 다음과 같이 작성해야합니다.

func New() Foo { 
    return &foo{} 
} 
관련 문제