나는 Go를 선택하기 시작 했으므로 쉽게 이해할 수없는 뭔가를 놓친 경우Go에서 하위 패키지로 패키지를 올바르게 구조화하는 방법 대부분의 방법에서 단일 유형이 수신자가 될 수 있습니까?
어쨌든, 현재 설계 단계에있는 유틸리티 라이브러리를 작성하여 x-go-binding 조금 쉬워졌습니다. (필자는 파이썬과 xpyb로 이것을 해왔다.) 예를 들어, EWMH spec에 정의 된 정보를 쿼리하고 콜백 함수에 키를 바인딩하는 데 도움이 될 것이다. (. 그리고 훨씬 더) 패키지 레이아웃 내 초기 아이디어 그래서, 고려 :
- 각각 자신의 패키지입니다
- xutil. (표준 라이브러리의 이미지 패키지 설정 방법과 비슷합니다.)
내 상황에 고유 한 점은 거의 모든 x-go-binding 호출이 xgb 연결 객체 또는 루트 창 식별자의 일부 조합을 필요로한다는 것입니다. 따라서과 같이 구조체에이 정보를 저장하기 위해 나에게 의미가 있습니다 : 나는 그렇게처럼 사용할 수있는 공장이 것
type XUtilConnection struct { conn xgb.Conn root xgb.Id // a few other things, like a mapping of events to callbacks }
그래야 :
xconn = xutil.NewXUtilConnection(blah blah)
를 그리고 수
012 : 같은keybind.get_keycode("a") ewmh.get_atom("_NET_ACTIVE_WINDOW")
xconn.get_active_window() xconn.bind_key("Shift-a", my_callback_fun)
도있을 수있다 기능 :처럼 사용할
물론 내 문제는 수신기가 내 지식으로는 같은 패키지에서 선언 된 유형일 수 있다는 것입니다. 내 패키지를 분리하면 내 하위 패키지에서 XUtilConnection 유형을 수신기로 사용할 수 없습니다.
필자의 답은이 큰 패키지를 다른 논리 파일로 분리하려고 할 것 같지만 이름 공간이 혼란 스러울 수 있습니다. 예를 들어, EWMH 스펙을 구현하는 데는 아마도 100 개 이상의 함수가 필요합니다.
XUtilConnection 객체의 각 하위 패키지에 새 컨테이너 유형을 정의 할 수 있다는 것도 알고 있습니다. (저는 이것이 캐스팅을 피하기 위해 단일 멤버 XUtilConnection을 포함하는 구조체 여야한다고 들었습니다.) 그러나 이것은 정말 지저분한 상황 인 것처럼 보이고, 내가 원했던 종류의 의미를 막을 것입니다. (즉, XUtilConnection 구조체를 사용하여 여러 모듈에서 메소드를 호출 할 수 있습니다.)
내 설계 프로세스의 모든 부분에 대한 조언은 크게 감사하겠습니다. 감사!
각 패키지에서 구조체를 재정의하지 않고이를 수행 할 수있는 방법이 있습니까? (항상 같을 것입니다.) – BurntSushi5
그래서이 접근법에서 두 가지 주요한 문제점을 봅니다 : 1) 모든 패키지에이 구조체를 다시 만들어야하고, 2) 내 ewmh 패키지가 내 keybind 패키지와 대화하기를 원한다면 내가 두 레이어에 임베딩을 수행하기 때문에 더 서투른. 솔직히 정말로 심하게 느껴집니다. 모든 것을 하나의 패키지에 집어 넣는 것이 덜 바람직 할 것 같습니다. 다른 아이디어? – BurntSushi5
2) 귀하의 질문에 ewmh 패키지가 keybind와 대화하고 싶다는 표시가 보이지 않았습니다. –