나는 최근에 Go
을 공부했습니다. 아래 샘플에서 b가 아닌 a 유형을 얻었습니다. 왜? 그리고 어떻게 얻을 수 있습니까?골란에서 아이의 타입을 얻는 방법
0
A
답변
2
구조체를 가리키는 say()
메서드가 하나뿐이므로 항상 A 값을 얻습니다.
say()
메서드를 B 구조체에 적용하면 컴파일러는 B 구조체의 say()
메서드가 있는지 또는 B 구조체의 메서드가 있는지 찾는 데 B 구조체와 해당 fileds를 찾습니다. say()
방법.
귀하의 경우, B 구조체에는이를 가리킬 방법이 없습니다. 하지만 구조체를 구현하고 say()
메서드를 가진 필드가 있습니다.
따라서 구조체 내에서 say()
메서드를 호출 할 때마다 B.A.say()
을 호출하면 A 값이 인쇄됩니다. 당신은 B와 값을 인쇄하려면
그렇지 않으면,이 예처럼 뭔가 코드를 수정할 수 있습니다
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
// This method will point to A struct
func (a *A) say() {
fmt.Println(reflect.ValueOf(a).Type().String())
}
type B struct {
A
}
// This method will point to B struct
func (a *B) say() {
fmt.Println(reflect.ValueOf(a).Type().String())
}
func main() {
b := new(B)
b.say() // expected output: *main.B
b.A.say() // expected output: *main.A
}
출력 : 당신은 또한이 코드를 실행할 수 있습니다
*main.B
*main.A
+2
Thx, 내 사고 방식을 바꿔야합니다. – yansen
관련 문제
- 1. 아이의 위치를 얻는 방법?
- 2. 골란에서 JSON 응답을 얻는 방법
- 3. 가변 타입을 얻는 방법
- 4. windows - 골란에서 화면 해상도를 얻는 방법
- 5. revel 골란에서 POST 매개 변수를 얻는 방법
- 6. 골란에서 http 리디렉션 상태 코드를 얻는 방법
- 7. 아이의 아이로부터 평균을 얻는 LINQ
- 8. 골란에서 길이를 포맷하는 방법
- 9. 거울로 선언 된 타입을 얻는 방법?
- 10. 골란에서 해시 배열 만들기
- 11. 골란에서 검열하는 가장 좋은 방법
- 12. 골란에서 메모리 풀링을 구현하는 방법
- 13. 구조 골란에서 Json을 압축하는 방법
- 14. 골란에서 슬라이스를 효율적으로 회전하는 방법
- 15. 중포 기지는 아이의 아이의 참조를 얻을
- 16. 아이의 행동
- 17. 호버 효과 선택된 아이의
- 18. @Around aspect에서 실행() 포인트 컷의 리턴 타입을 얻는 방법?
- 19. haskell에서 타입을 체크하는 방법
- 20. 안드로이드 JSONObject에서 int 타입을 얻는 법
- 21. 골란에서 종료하기 전에 중단 점을 설정하는 방법
- 22. 골란에서 변수를 테스트 케이스에 전달하는 관용적 방법
- 23. 골란에서 패키지 이름과 객체 이름을 구별하는 방법
- 24. 골란에서 체크 박스를 체크하는 관용적 인 방법
- 25. 골란에서 스택 오버플로 오류를 catch하는 방법
- 26. 채널을 안전하게 사용하여 골란에서 데이터를 동기화하는 방법
- 27. 골란에서 http 응답의 일부로 jsonb를 인코딩하는 방법
- 28. 골란에서 가변 바이트 인코딩 알고리즘을 구현하는 방법
- 29. 골란에서 Linux/UNIX의 시스템 호출을 호출하는 방법
- 30. 골란에서 다음 구조체의 구조체를 초기화하는 방법
삽입은 ** 상속 **이 아닙니다. 부모/자식 또는 슈퍼/서브 클래스 관계에 대해 생각하는 것은 전혀 도움이되지 않습니다. 그만. 'b.say()'는 * nothing *이지만'b.A.say()'의 속기 표기법입니다 :'say' 메소드는 항상'A'에서 호출됩니다. 당신이하려고하는 것은 불가능합니다. – Volker