Programming/Go

Go언어 "import cycle not allowed" 편

KayEsQuo 2021. 2. 25. 22:14

 

여러 개의 모듈을 사용하여 프로젝트를 하다 보면 "import cycle not allowed" 문구가 나와 당황하게 되었던 적이 있을 것이다. 그러나 원인을 알면 사이클이 왜 안되는지 알 수 있다. 자세한 건 아래 그림과 코드로 설명을 하겠다.

 

 

Cycle 예시

 

[main.go]

package main

import (
	"fmt"
	"golang/cycle/Firstsub"
)

func main() {
	Firstsub.AddCall()
}

[Firstsub.go]

package Firstsub

import (
	"fmt"
	secondsub "golang/cycle/Secondsub"
)

func AddCall() {
	fmt.Println("this is firstSub")
	secondsub.CallSecondSub()
}

[secondsub.go]

package secondsub

import (
	"fmt"
	"golang/cycle/Firstsub"
)

func CallSecondSub() {
	fmt.Println("this is second sub")
	Firstsub.AddCall()
}

위 그림에 나와있는 모듈과 코드의 모듈은 일치한다. 언뜻 보면 문법에는 이상한 점이 없는 코드인 듯 하지만, 자세히 보면 FirstSub.go SecondSub.go 사이에서 import를 하여 무한반복적으로 호출하는 것을 알 수 있다. 이를 사이클이라고 한다. 만일 "import cycle not allowed"라는 에러 문구를 봤다면, 내 프로젝트에 사이클 구조가 있는지 확인해보자