Programming/golang

go 모듈 불러오기

구차니 2022. 4. 6. 10:50

아따 어렵다 -_- 다른 동료 도움을 받아서 해결

 

일단 아래의 기본 구조를 따라가고

serial.go와 tcp.go는 이름만 거창하지 그냥 fmt.Println("hello serial world") 출력하는 테스트 코드만 들어있다.

$ tree
.
├── go.mod
├── internal
│   └── util
│       ├── serial.go
│       └── tcp.go
├── main
├── main.go
├── pkg
│   └── mod
│       └── cache
│           └── lock
└── web
    ├── img
    ├── index.html
    └── style.css

7 directories, 8 files

 

go build 하면 에러가 발생하고

go mod init 프로젝트 명   으로 모듈을 초기화 해주고 나서 다시 빌드하면 문제없이 빌드된다.

go mod tidy는 먼지 조금더 찾아봐야 할 듯.

$ go build main.go
main.go:6:2: package l2s/internal/util is not in GOROOT (/usr/lib/go-1.17/src/l2s/internal/util)

$ go mod init test
go: creating new go.mod: module test
go: to add module requirements and sums:
        go mod tidy

$ go build main.go

 

go mod init 하면서 GOMOD 경로가 변경되는 듯.

$ go env | grep GOMOD
GOMODCACHE="/home/minimonk/pkg/mod"
GOMOD="/home/minimonk/src/l2s/go.mod"

 

테스트 해보니 현재 빌드 경로에서 벗어나면 GOMOD 값이 변경된다. 신기하네..

$ go env | grep GOMOD
GOMODCACHE="/home/minimonk/pkg/mod"
GOMOD="/dev/null"

 

함수명이 대문자로 시작해야 외부에서 호출 가능한... public 함수라고 해야하나?

go 키워드를 찾아봐야겠네.

 Go에서는 대문자로 된 변수명은 패키지 외부에서 사용 할 수 있다라는 기능적 의미를 가지고 있어서 사용자가 이해하기 쉬운 측면이 있다.

[링크 : https://blog.billo.io/devposts/golang_naming_convention/]

 

아래와 같은 디렉토리들로 기본 구성되고 src는 있어서는 안된다고 한다.

/cmd (메인을 여기에?) 
/internal (메인에서 호출한 사용자 작성 모듈들을 여기에?)
/pkg (외부 종속성 추가)
/vendor

/api
/web

/configs
/init
/scripts

[링크 : https://github.com/golang-standards/project-layout/blob/master/README_ko.md]