2014-11-07 2 views
1

나는 실제로 보았던 함수의 이름을 찾기 위해 고심하고있다. 그에 println '이벤트'에서이름없이 함수/메소드 이동하기

 select { 

      case event := <-watcher.Events: 

       log.Println("Event Triggered: ", event) 

된다

https://github.com/go-fsnotify/fsnotify/blob/master/fsnotify.go#L32

이 내가합니다 (fsnotify 예에 따라)를 사용하고 어떻게 : 여기

는 문제의 함수이다 위의 함수에 따라 형식화 된 문자열을 반환, 나는 '이벤트'에 대한 직선 호출이 해당 함수를 사용하는 방법을 이해하는 데 어려움을 겪고 있지만 구조체 필드 (event.Name, event.Op) :

내가 이름/타입/검색어 마련하기 위해 사투를 벌인거야 -이가 이름이없는 등의 '기본'기능이며 단지 형식의 데이터를 반환처럼

event.funcForReturningNicelyFormattedEvent는()

느낀다 그래서 나는 그 개념을 더 많이 이해할 수 있고 그 개념을 이해할 수 있고 그 뒤에있는 추론을 중요하게 생각할 수 있습니다.

도움을 주시면 감사하겠습니다.

답변

2

매우 간단합니다. println은 자동으로 구현하는 모든 구조체에서 String() 메서드를 사용합니다. 이것은 Go의 암시 적 인터페이스의 고전적인 사용 사례입니다. 인터페이스에 포함 된 메서드가있는 모든 구조체는 인터페이스를 구현하는 것으로 간주됩니다.

func String() string 인 경우 Stringer으로 간주되며 fmt에서 사용됩니다. 당신은 물론 자신의 구조체에도 사용할 수 있습니다.

+1

감사합니다. 당신의 설명은 나에게 '왜'를 검색하는데 시간을 절약 해주었습니다. –

1

기능 Println은 전달 된 값이 Stringer 인터페이스를 구현하는지 확인합니다. 그럴 경우이 값으로 메소드 String을 호출합니다. 이벤트 유형은 연결 한 부분에서 String 메서드 구현을 제공하여 해당 인터페이스를 구현합니다.

이동 중에는 사용자가 implement interface을 선언 할 필요가 없습니다.

관련 문제