Go Module import 할 때 GOROOT 에러 문제

어제부터 Go 언어를 배워보려고 이것 저것 연습을 해봤습니다. 좀 이상하게 생긴 언어라고 생각하면서 ㅋㅋ 여러가지 코드를 연습했습니다.

그리고 오늘 내가 만든 사용자 정의 패키지를 임포트 시키려하니까 자꾸 GOROOT, GOPATH 에러가 나네요. 한참을 구글링해서 겨우 해결 방법을 알아냈습니다.

비망을 위해 기록해둡니다.

진행 방법 : hello 안에 greetings을 import 할 예정

// 현재 작업 디렉토리 구조 입니다.
C:.
├─bin
├─pkg
└─src
    ├─greetings
    └─hello

greetings 폴더 안에 있는 패키지 greetings.go를 hello 폴더 안에 있는 hello.go에서 사용하기 위해 임포트 시키려 합니다.

greetings.go 파일

package greetings

import "fmt"

func Hello(name string) string {
	message := fmt.Sprintf("Hi, %v. Welcome!", name)
	return message
}

hello.go 파일

package main

import (
	"fmt"
	"mypkg/greetings"
)

func main() {
	// message := "Hello, world!"
	message := greetings.Hello("반고흐")
	fmt.Println(message)
}

// 결과 : Hi, 반고흐. Welcome!

진행 순서 ( GOROOT, GOPATH 관련 에러)

  • greetings 폴더로 이동해서 go mod init mypkg 해서 모듈을 초기화 함. mypkg는 모듈 이름이며 아무렇게나 지어도 상관 없음(예: go mod init naver.com/kkk => naver.com/kkk가 모듈이름 임)
  • 위에서 보이는 것처럼 greetings.go 코드를 작성해준다.
  • hello폴더로 이동해서 go mod init main 하여 init을 해준다.
  • hello.go 파일 안에 import ("mypkg/greetings") 하여 import 해주고 나머지 코드를 작성한다.
  • 이 상태로 실행하면 greetings를 찾을 수 없다고 에러가 난다.
  • 그래서 찾을 수 있도록 go mod edit -replace 명령을 사용하여 아래와 같이 명령을 내린다.
  • go mod edit -replace mypkg/greetings=../greetings 이 부분이 핵심이다.
  • 이제 마지막으로 go mod tidy 하여 의존성을 정리하면 끝이다. 이렇게 하면 go.mod 파일안에 임시버전 v0.0.0-000101010… 이런 것이 생길 것이다.
  • 이제 go run hello.go 를 실행하면 잘 된다.

위와 같은 과정은 단지 연습을 위한 과정이다. 실제로 개발을 하게 된다면 보통 go mod init 다음 이름 부분에 실제 사이트 경로를 적을 것이다. example.com/news 이런 식으로 보통 적는다.

참고로 이제 Go를 배운지 하루 밖에 지나지 않아서 용어나 내용이 다소 이상하더라도 이해해 주면 좋겠다. 그럼 새해 복 많이 받으시고 안녕히 계시길…

[참고 블로그]

답글 남기기

16 − 10 =