탐색
우리는 다음 구조로 프로젝트를 설계하고 싶습니다.
├── main.go └── models └── user.go
이 레이아웃에서 main.go는 user.go 파일을 가져옵니다. 사용자 유형. 그런데 컴파일러에서는 메인 패키지에 User가 정의되어 있지 않다고 경고합니다.
질문
이 오류는 왜 발생하며, 모듈식 프로젝트 구조를 유지하면서 어떻게 해결할 수 있나요?
답변
이 문제는 프로젝트에 모듈 정의가 없기 때문에 발생합니다. Go 1.11.1 이전에는 Go가 $GOPATH 환경 변수에 의존하여 프로젝트 종속성 관리가 복잡해졌습니다.
Go 1.11.1에 도입되고 Go 1.11.3에서 기본적으로 활성화되는 Go 모듈, 주소 이 문제. 모듈을 활성화하면(GO111MODULE=on 환경 변수를 통해) 버전이 지정된 종속성과 계층적 구성을 갖춘 모듈식 프로젝트를 생성할 수 있습니다.
해결책
Go 모듈을 활용하려면 다음 단계를 따르세요.
go.mod 만들기 파일:
/Users/myuser/Projects/my-project/ ├── go.mod ├── main.go └── src/ └── models/ └── user.go
사용자 가져오기.go main.go:
샘플 main.go:
package main import ( "fmt" "main/src/models/user" ) func main() { fmt.Println(user.User{"new_user"}) }
샘플 user.go:
package user type User struct { Login string }
이 구조 models/user.go 파일의 사용자 유형을 main.go 파일로 가져올 수 있습니다. go.mod 파일은 모듈 이름을 정의하고 프로젝트의 루트 역할을 합니다.
위 내용은 Go에서 하위 폴더에서 파일을 가져오면 '정의되지 않은' 오류가 발생하는 이유는 무엇이며, 모듈식 프로젝트 구조를 유지하면서 Go 모듈을 사용하여 이 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!