func main ()의 데이터베이스 인스턴스 세트를 다른 패키지에서 사용할 수있게하는 방법은 무엇입니까?

gglasses :

첫 번째 웹 앱을 작성 중이며 다음과 같은 구조를 가지고 있습니다.

.
├── main.go
├── model
│   ├── model.go
│   └── book.go
├── route
│   └── route.go
└── view
    └── view.go

/main.go 는 내 main () 이있는 곳입니다. 그 파일에서 나는 또한 내 데이터베이스의 인스턴스를 유지할 변수 Env를 정의했습니다 (적어도 그것이 계획입니다).

에서 /main.go 내가 할

import "project/view"

type Env struct {
    db models.Collection
}

// rest of the code

func main() {
    db, err := models.NewDB()
    // etc
    MyEnv := &Env{db}
    // etc
}

그러나 문제는 /view/view.go 에서 /model/book.go에 정의 된 메서드를 호출해야 한다는 것입니다. 그리고 그렇게하는 방법은 MyEnv.db 인스턴스를 통하는 것이라고 생각 했지만 물론 오류가 발생합니다.

view / view.go : 13 : 14 : 정의되지 않음 : Env

^^ 그 문제를 해결하는 데 도움을 주시거나 프로젝트를 더 잘 구성하는 방법에 대한 안내를 주시면 감사하겠습니다. :)

고누 츠 :

다른 패키지의 이름 (변수, 유형 등)을 사용하려면 import해당 패키지 가 필요 합니다. 예를 들어 메인 패키지에서 import "view"할 수 view.Something있습니다.

이제 기본 패키지를 가져올 수 없습니다. 이는 view패키지가 main를 호출하기 위해 가져올 수 없음을 의미합니다 main.Env. 따라서 다른 방법을 사용해야합니다. 가능성은 다음과 같습니다.

  1. 패키지에 Env유형을 넣은 view다음 main패키지에서 var myEnv = view.Env{}.

  2. Env자신의 패키지를 입력 env하면 다음 모두 가져 오기 viewmain

  3. 구체적인 유형을 사용하는 대신 패키지 Envinterface유형을 사용할 수 있습니다 view. 이 유형은 필요한 기능 만 노출해야합니다. 그런 다음 main패키지 에서 해당 유형을 구현하고 해당 인스턴스를 view.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사