Go 언어에는 인터페이스 유형이 기능으로 C 스타일 인터페이스와 유사합니다. Go의 인터페이스 유형은 시행되지 않는 것 같습니다. 실제로 유형에 적용되지 않고 프로토콜을 정의하기 만합니다. 강제적이지 않으므로 인터페이스를 사용하는 것이 좋습니다.Go의 인터페이스가 강제로 적용되지 않으면 필요합니까?
답변
예. Go는 타입 계층 구조를 만들 수 없기 때문에 인터페이스는 일부 다형성을 허용하는 데 매우 중요합니다. 패키지 sort
에 정의 된 sort.Interface
을 고려
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less returns whether the element with index i should sort
// before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
sort
패키지는이 인터페이스를 구현하는 객체를 예상하는 기능 sort(data Interface)
이 포함되어 있습니다. 인터페이스가 없으면 그런 형태의 다형성은 불가능합니다. 실제로이 인터페이스를 구현 한 유형에 주석을 달지 않아도된다는 사실은 부적합합니다.
멋진 부분은 유형이 동일한 패키지에 정의되어있는 한 기본 유형에이 인터페이스를 구현할 수도 있다는 것입니다. 그래서 다음 코드는 정수의 정렬 배열 정의
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
"기본 유형에이 인터페이스를 구현할 수도 있습니다."즉, 기본 유형과 구조적으로 같을 수있는 사용자 정의 유형에 대한 메소드를 정의 할 수 있습니다. 'Sequence'와'[int]는 서로 다른 타입입니다. – newacct
'Sequence' 대신'[] int'에서 같은 메소드를 정의하고 실제로 OA의 목표를 달성 할 수 없었습니까? 또는 원시 타입에 대한 새로운 메소드를 작성할 수 없습니까? – matthias
mathias : 1 년 이상 무작위로 봤습니다.하지만 아니요, 기본 유형에 새로운 메소드를 정의 할 수 없습니다. – twotwotwo
내가 statical 런타임에 모두 유형 검사가, 무엇인지 알고 희망을, 그러나 나는 "인터페이스를 강화"하는 것입니다 무엇인지 전혀 모른다.
- 1. 우리는 왜 인터페이스가 필요합니까?
- 2. html을 출력하지 않으면 htmlspecialchars가 필요합니까?
- 3. RESTful 웹 서비스의 인터페이스가 필요합니까?
- 4. 왜 JPA에서 많은 인터페이스가 필요합니까?
- 5. 왜 우리는 IAudioRenderClient 인터페이스가 필요합니까
- 6. 페이지가 다시로드되지 않으면 쿠키 값이 적용되지 않습니다.
- 7. UISwipeGestureRecognizer에 대한 인터페이스가 표시되지 않으면 선택기 'touchesMoved : withEvent :'가 선언됩니다. '
- 8. Go의 동시 루틴
- 9. Google Go의 차트 라이브러리?
- 10. Magento Go의 HTML 5
- 11. float64를 Go의 int로 변환
- 12. 포커스가 있지 않으면 색상이 DataGridview 행에 적용되지 않습니다.
- 13. Go의 openpgp 패키지는 어떻게 사용합니까?
- 14. Go의 런타임 라이브러리 문서가 오래되었습니다.
- 15. 특정 함수가 호출되지 않으면 강제로 컴파일러 오류가 발생할 수 있습니까?
- 16. 데이터 계약에 필수 요소를 추가하지 않으면 새 네임 스페이스가 필요합니까?
- 17. IE (Internet Explorer)의 버전을 고려하지 않으면 CSS 재설정이 필요합니까?
- 18. Serializable 표준 클로저 인터페이스가 있습니까?
- 19. 문자열을 Go의 한 자리 숫자 배열로 변환
- 20. Go의 일반 데이터 액세스 기능 작성
- 21. Go의 버퍼링 된 채널은 잠김 상태입니까?
- 22. 테마가 적용되지 않습니다.
- 23. 세션 변수가 asp.net에서 적용되지 않습니다.
- 24. asdoc을 강제로 강제로 실행하는 방법
- 25. Android : 강제로 onKeyListener를 강제로 수행하십시오.
- 26. 매핑 I 인터페이스가 NHibernate에
- 27. cmd.exe에 대한 인터페이스가 있습니까
- 28. Java 인터페이스가 프록시되었는지 테스트합니다.
- 29. ROT에서 COM 인터페이스가 사라짐
- 30. 인터페이스가 구현자를 알고 있습니다.
"적용"이란 무엇을 의미합니까? 값은 인터페이스를 구현하기 위해 인터페이스를 구현해야하며 이는 유형 검사기에 의해 강제됩니다. 형식이 인터페이스를 구현한다고 선언 할 필요는 없지만 이것은 의도적으로 문제가되지 않습니다. – SteveMcQwark
"C 스타일 인터페이스"란 무엇입니까? 그리고 Go가 인터페이스를 강제하지 않는다는 것은 무엇을 의미합니까? Go 컴파일러는 특정 인터페이스를 사용하는 함수에 유형을 전달할 때 인터페이스가 충족되고 컴파일시 정적으로 수행하며 Go를 훌륭하게 만드는 기능 중 하나라는 사실을 분명히 강요합니다. – uriel
-1 :이 질문은 Go의 인터페이스가 시행되지 않는다는 잘못된 개념을 기반으로합니다. http://play.golang.org/p/V65p3FMvPO – weberc2