ProgrammingLang/Go

[Go Lang] package xx is not in GOROOT (/snap/go/9028/src/xx) 해결 방법

jinkwon.kim 2022. 3. 3. 00:14
728x90
반응형

개요

package xx is not in GOROOT  에러를 해결 합니다.

 

발생이유

사용자가 만든 패키지를 go complier가 $GOROOT에서 찾고있어서 발생함.

 

아마 대부분 다음 단계를 거쳐서 디레토리 구조를 이렇게 만들고 개인이 만든 패키지를 추가하려고했을 것입니다. 

 

1. go 사용자 package 생성 및 main.go 생성

├── go.mod
├── lib
│      └── common.go
└── main.go

lib/common.go (사용자 패키지)

package common           
                         
import "fmt"             
                         
func PrintModuleName() { 
    fmt.Println("Common")
}

 

main.go

package main

import (
    "lib"
)

func main() {
    common.PrintModuleName()
}

2. go mod init {모듈 이름} 으로 go.mod 생성

    #go mod init test-code

jinkwon@jk-server:~/aws-sdk/sample_code$ go mod init test-code
go: creating new go.mod: module test-code
go: to add module requirements and sums:
        go mod tidy

 

3 main.go 실행 

    #go run main.go

그러면 에러가 똬!!!!

main.go:4:5: package lib is not in GOROOT (/snap/go/9028/src/lib)

 

해결 방법

go mod init {모듈 이름} 을 했을때 사용한 {모듈 이름}을 main.go에서 import한 lib 앞에 붙여주면 끝이다. 

모듈 이름은 go.mod를 열어 모면 맨 윗줄에 명시되어있다. 

module test-code

 

수정된 main.go

package main

import (
    "test-code/lib"
)

func main() {
    common.PrintModuleName()
}

실행 결과 

jinkwon@jk-server:~/aws-sdk/sample_code$ go run main.go 
Common

 

위와 같이 모듈 이름만 추가해서 가능한 이유는 Go Module 기능을 사용했기 때문이다.

 

728x90
반응형