2016-10-23 4 views
2

Bazil/Fuse를 사용하여 Go를 사용하여 파일 시스템을 만들 때 a tutorial을 읽습니다. 튜토리얼에서 Go의 스 니펫은 무엇을합니까? 그것은 상속입니까?

, 내가 예를 들어 다음을 참조하십시오 (특히 파일 시스템의 루트를 얻을 수) :

var _ fs.FS = (*FS)(nil) 

func (f *FS) Root() (fs.Node, fuse.Error) { 
    n := &Dir{ 
     archive: f.archive, 
    } 
    return n, nil 
} 

내가 이해하지 못하는거야 특정 라인은 처음이다. 실제로 그게 뭐야? 내가 그 라인을 포함하지 않는다면, 내가 원한다면이 메소드에 대한 서명을 만들 수 있다고 믿는다 - 내가 그것을 포함한다면, 나는 그들의 고유 한 서명을 오버라이드 (override)해야한다.

누군가이 행의 내용을 정확히 설명 할 수 있습니까? 언제 사용하고 싶습니까?

답변

4

이 코드 줄은 *FS 유형이 fs.FS 인터페이스를 만족하는 컴파일 타임 어설 션입니다. 주장은 사실이 아니다하면 컴파일러에서 오류를보고

이 같은 라인의 전형적인 사용 형태가 어떤 인터페이스를 충족시키고 만족스러운 유형에 따라 패키지에 다른 코드가 없다는 것을 확인하는 것입니다
*FS does not implement fs.FS (missing <method name> method) 

인터페이스

이 줄은 프로그램 실행에 영향을 미치지 않습니다.

+0

고마워요! 이것은 나의 가설 이었지만 자신보다 많은 경험을 가진 사람으로부터 확신을 얻고 싶었습니다. –

+1

패턴은 Go 문서에도 설명되어 있습니다. https://golang.org/doc/effective_go.html#blank_implements – Matthias247

관련 문제