Golang(Go) 순환참조 문제(import cycle not allowed) 발생
배경
- serviceA 에서 다른 serviceB 의 함수를 호출하려고 한다.
- serviceB에서 이미 serviceA를 호출하고 있다.
- 코드가 실행되지 않는다.
결국 serviceA에 함수를 serviceB에 옮기고 사용했다
이럴경우 어떻게 해야 할까?
계속...이런 문제가 발생하니..(2-3년 해보니) 계속 늘어나니까 처음부터 개발시 해당 내용을 논의하고 방향을 정해놓고 해보고 싶다는 생각이 들었다
- 공통으로 자주쓰는 회원 서비스를 다른 서비스에서 부르는 구조
- ex) 기부영수증에서는 기부정보를 자주 불러와서 조회가 필요함 기부영수증 -> 기부
- 정말 어려운 경우는 야매로..repository 불러서 해결했음
golang 에서 순환참조 발생하는 경우
__________ __________| |<---- | ||packageA | |packageB|| | ---->| |__________ __________
packageA ↗ ↘packageC ← packageB
패키지의 순환참조?
관련 현상을 검색해보니 이 현상은 golang 은 패키지의 순환 참조는 지원하지 않아서 발생한다고 한다 찾아보니 다른 언어에서도 발생하는데...
ex)자바에서 순환 의존 관계 때문에 순환참조의 고리를 끊는다... 스프링에서 권항하는 방법은 설계변경 ...변경 불가시 @Lazy 어노테이션 사용,스프링 의존성 주입?https://keichee.tistory.com/446
참고
https://medium.com/daangn/how-to-write-a-testable-golang-code-4c0e67612bb8 https://www.popit.kr/%EC%9E%90%EB%B0%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-go-%EC%9E%A0%EA%B9%90-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B4%A4%EC%8A%B5%EB%8B%88%EB%8B%A42/