개요
import cycle not allowed가 발생하는 경우
+---------------------+ +----------------------+
| user 패키지 | | board 패키지 |
| | | |
| +-----------------+ | | +------------------+ |
| | User Struct | | | | Post Struct | |
| +-----------------+ | | +------------------+ |
| | | |
| +-----------------+ | | +------------------+ |
| | GetFriendList() | <-------+ | GetLastPostByUserID() |
| +-----------------+ | | +------------------+ |
| | | |
| +-----------------+ | | +------------------+ |
| | GetUserNameByID() +-------> | GetPostList() | |
| +-----------------+ | | +------------------+ |
| | | |
+---------------------+ +----------------------+
- user패키지에는 친구 리스트를 반환하는 func가 존재하고 <- board패키지로 부터 마지막 작성한 게시글을 취득
- board패키지에서는 게시판 글 리스트 반환하는 func이 존재 -> user패키지로 부터 유저의 이름을 취득
1. 프로젝트 구조
/dependency1
│
├── main.go
├── user
│ └── user.go
└── board
└── board.go
2. 코드
main.go
package main
import (
"dependency1/board"
"dependency1/user"
"fmt"
)
func main() {
friendList := user.GetFriendList(1)
fmt.Println("Friend List:", friendList)
postList := board.GetPostList()
fmt.Println("Post List:", postList)
}
board.go
package board
import (
"dependency1/user"
)
type Post struct {
ID int
UserID int
Title string
Content string
}
var posts = []*Post{
{ID: 1, UserID: 1, Title: "First Post", Content: "This is Alice's first post"},
{ID: 2, UserID: 2, Title: "Hello World", Content: "This is Bob's first post"},
}
type PostInfo struct {
*Post
UserName string
}
func GetPostList() []*PostInfo {
var postList []*PostInfo
for _, post := range posts {
// 각 게시글 작성자의 이름을 가져옴
userName := user.GetUserNameByID(post.UserID)
info := &PostInfo{Post: post, UserName: userName}
postList = append(postList, info)
}
return postList
}
func GetLastPostByUserID(userID int) string {
// 주어진 userID의 마지막 게시글 반환
for i := len(posts) - 1; i >= 0; i-- {
if posts[i].UserID == userID {
return posts[i].Title
}
}
return "No posts found"
}
user.go
package user
import (
"dependency1/board"
)
type User struct {
ID int
Name string
FriendIDs []int
}
var users = []*User{
{ID: 1, Name: "Alice", FriendIDs: []int{2}},
{ID: 2, Name: "Bob", FriendIDs: []int{1}},
}
type FriendInfo struct {
*User
LastPost string
}
func GetFriendList(userID int) []*FriendInfo {
user := GetUserByID(userID)
if user == nil || len(user.FriendIDs) == 0 {
return nil
}
var infoList []*FriendInfo
for _, friendID := range user.FriendIDs {
friendUser := GetUserByID(friendID)
// 유저의 마지막 글을 취득
lastPost := board.GetLastPostByUserID(friendUser.ID)
info := &FriendInfo{User: friendUser, LastPost: lastPost}
infoList = append(infoList, info)
}
return infoList
}
func GetUserByID(userID int) *User {
for _, user := range users {
if user.ID == userID {
return user
}
}
return nil
}
func GetUserNameByID(userID int) string {
user := GetUserByID(userID)
if user == nil {
return ""
}
return GetUserByID(userID).Name
}
3. 실행결과
package dependency1
imports dependency1/board
imports dependency1/user
imports dependency1/board: import cycle not allowed
import cycle not allowed 에러가 발생하는걸 확인 할 수 있다