잠시만 기다려 주세요

전체검색 :  
HOME   |  여기는?   |  바다물때표   |  알림 (5)  |  여러가지 팁 (939)  |  추천 및 재미 (175)  |  자료실 (21)  |  끄적거림 (617)  |  시나리오 (760)  |  드라마 대본 (248)  |  

    golang

golang - golang go.mod go.sum 모듈 관련 문제. GOPATH SRC not module, 1.16 로컬 패키지 사용 문제.
이 름 : 바다아이   |   조회수 : 159         짧은 주소 : https://www.bada-ie.com/su/?AJAOc6-DQEEr
일단 저도 아직은 개념이 잘 정립이 안되어서 일단은 기록해 놓고
나중에 더 자세히 공부해서 수정하도록 하겠습니다.
까먹을 수 있으니 일단 기록...

1.16 올라오면서 GO111MODULE 요 환경변수가 on 기본 입니다.
기존엔 GOPATH 잡아놓고 src 디렉토리 아래 소스 놓고 컴파일 했으나
이제는 그게 안 먹힙니다. 물론 off 로 놓고 가능은 하지만 1.17 부터 이제 지원 안 한다네요..

모듈 개념이 도입이 되었습니다. 물론 그 전부터 적용은 되었지만 이제 강제하네요.. -.-;
그래서 패키지 불러오는 개념이 좀 변경 되었습니다.
이제는 굳이 GOPATH 안 src 에 소스 넣지 않아도 됩니다.
아무 디렉토리 만들어서 작업해도 컴파일 됩니다. 다만 go.mod 파일을 생성 하셔야 합니다.
go.mod 파일을 바탕으로 인식을 합니다.
프로젝트 단위로 폴더 만들면 좋겠네요...

젤 중요한 건... 이제 외부에서 패키지를 가져온다는 개념입니다.
기본적으로 도메인 사용이 되어야 합니다. 깃헙에서 가져오는 go get 그런 느낌...
물론 요거 replace 명령어로 로컬 패지지 사용이 가능합니다. 페이크죠...

원하는 곳에 badaie 같이 프로젝트 폴더 하나 만드세요...
앞으로 badaie 폴더에 소스 파일을 이제 위치할 겁니다. 메인 루트가 되겠죠..
도메인은 bada-ie.com 사용하고요.. 없으신 분은 가상으로 아무 도메인 넣으세요. 꼭 필수..
패키지 불러올 때 기본으로 '도메인/프로젝트폴더' 요게 기본입니다. (깃헙 외부 패키지 불러오는 거 같죠.)
그 아래에 home 이라는 패키지가 있다고 가정합시다. (bada-ie.com/badaie/home 요런식)
home 패키지를 다 만드시고 아래 명령어를 쳐서 go.mod 파일을 생성합니다.
(home 패키지의 go.mod 생성시 이름에서 도메인은 생략해도 됩니다. 하위는 괜찮음. 써도 되고욤.)

cd home
go mod init home


home 패키지 폴더에 만들어진 go.mod 파일을 열어보면 단순합니다.

module home

go 1.16


이제 badaie 메인 폴더에서 main 프로그램 만드시고
로컬 home 패키지를 불러올 겁니다. import 시에 (기존에는 그냥 home 만 했지만 이제 도메인 넣어야 합니다.)

import (
    "bada-ie.com/badaie/home"
)


가상으로 아무 도메인 쓰시면 됩니다. 로컬 패키지는 나중에 replace 로 페이크 쓸 거니까요...
replace 안 쓰면 실제 도메인으로 접속해서 소스 가지러 가겠죠...
이제 badaie 메인 폴더에서 (메인 폴더 여기서는 go.mod 만들 때 이름에 도메인, 프로젝트명 적습니다.)

go mod init bada-ie.com/badaie

여기서 대단히 중요!!! 아래 tidy 옵션 하기전에 replace 부분을 수작업으로 go.mod 파일에 넣어 놓으셔야 합니다.
안 그러면 에러 납니다. 로컬 하위 패키지 관련 말하는 겁니다. 아래 보면 항목 보이죠...


replace (
    bada-ie.com/badaie/home v0.0.0 => ./home
)


go mod tidy

go mod tidy 명령어로 프로젝트 전체 필요한 패키지를 인식해 줍니다.
서브 패키지에서는 init 만 하시고 tidy 옵션 부분 굳이 안쳐도 됩니다.
메인에서만 인식해 주면 서브에 필요한 패키지 알아서 인식합니다.
서브에서 tidy 옵션 하셔도 됩니다만 필요한 거 그냥 메인에 깔끔하게 모아 놓는 것도 좋겠죠..
badaie 메인에 만들어진 go.mod 파일을 보면

module bada-ie.com/badaie

go 1.16

require (
    bada-ie.com/badaie/home v0.0.0
)

replace (
    bada-ie.com/badaie/home v0.0.0 => ./home
)


replace 부분은 go mod tidy 하기 전에 직접 쓰셔야 합니다. 대충 어떻게 버전관리하는지 감 오실 겁니다.
require 는 badaie 프로젝트에 필요한 각 패키지를 기록하게 됩니다.
근데 이건 go mod tidy 시 자동으로 알아서 잡아줍니다.

문제는 이미 개발되어 있는 소스들입니다. 로컬 관련 패키지는 다 찾아서 replace 에 넣으셔야 합니다.
추가하면 메인루트는 반드시 go mod tidy 한번 쳐야 합니다.
또한 import 시 대부분 소스에서는 로컬 패키지들을 그냥 도메인 없이 import 했을 겁니다.
기존에는 import 시 그냥 패키지명만 쓰셨을건데...
이거 이제는 도메인명에 프로젝트 폴더명까지 경로 전부 꼭 적어야 합니다.
상당히 많은 소스들을 고쳐야 할 겁니다. 노가다죠...
현재 제가 잘 몰라서 그럴 수도 있는데 저는 그냥 다 고쳤습니다.
아래 리눅스 명령어 이용하시면 편하겠죠.. 작업 전 반드시 백업 필수!!

import 부분에서 "home" 관련된 것을 "bada-ie.com/badaie/home" 으로 변경합니다.
하위 디렉토리까지 찾아서 다 치환합니다.

find . -name "*.go" -exec perl -pi -e 's/\"home\"/\"bada-ie.com\/badaie\/home\"/g' {} \;

설명 다 했습니다. 이제 'go build 메인소스' 해서 컴파일 하시면 됩니다. 잘 될 겁니다.
해 보세요... 자세한 것은 저도 공부를 좀더 해서 다시 수정 기록해 놓겠습니다.
그리고 이제 필요한 외부 패키지 go get 굳이 안 해도 됩니다.
go.mod 잘 생성되었다면 필요한 것은 알아서 땡겨 옵니다.

하위 패키지던 뭐시던 'go mod init 이름' 은 필수입니다.
다 go.mod 파일 있어야 합니다.
또한 메인루트에서는 'go mod tidy' 해서 각 패키지 관련 적용해 주어야 합니다.

p.s
기존에는 외부 패키지를 세팅해논 GOPATH 의 src 폴더로 가져왔는데
이제는 pkg/mod 폴더로 받는 거 같습니다. 확실하지 않아요.. 공부 필요.. ^^;

p.s2
더 좋아지려는 golang 의 노력을 고맙게 생각하지만
갑작스럽게 이러면 난감 ㅠㅠ.
이러다 C언어의 파일 쪼개기 -.-; 이러면 안되는뎅.

p.s3
각 패키지에서 go.mod 생성시 'go mod init 이름'
모듈 이름은 크게 상관없는 거 같은데
저는 메인은 도메인과 프로젝트폴더까지 써서 이름으로 쓰고
그 하위 로컬 패키지들은 그냥 하위폴더 이름으로 통일합니다.
이건 나중에 좀 생각 좀 해 봐야 겠네요..
 
p.s4
go.sum 은 나중에 비교를 위해 첵썸 파일이라고 봅시다. 이건 건들지 마세요.
뭔가 꼬였다 싶으면 go.mod 하고 go.sum 전부 지우고 다시 시도 하세요.
 
| |


      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
현재글 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 160
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 425
172 golang , String Formatting 바다아이 1375
171 golang rand.Intn , random, , . 바다아이 1273
170 golang golang ... 바다아이 2562
169 golang golang gopath, goroot .. golang 바다아이 2109
168 golang golang ... Force download file example 바다아이 2555
167 golang golang , , cpu, memory, disk 바다아이 3310
166 golang golang , ... GOOS, GOARCH 바다아이 2670
165 golang golang checkbox ... 바다아이 2868
164 golang golang , , http .... 바다아이 2765
163 golang golang nil , nil , nil ... 바다아이 2908
162 golang 2 golang, go , .... golang .... 바다아이 3805
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 3054
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 3175
159 golang golang , iconv 바다아이 3399
158 golang golang quote escape, unquote 바다아이 3185
157 golang golang , http errorLog , , ... 바다아이 3300
156 golang golang interface , 바다아이 3161
155 golang golang struct .... 바다아이 3398
154 golang golang map map , 바다아이 3134
153 golang golang map .... .... 바다아이 3128
152 golang golang slice copy 바다아이 3129
151 golang golang goto 바다아이 3265
150 golang golang slice sort , int, string, float64 바다아이 3220
149 golang URL Parsing, url . parse 바다아이 3311
148 golang golang , interface{} ... 바다아이 3259
147 golang golang interface to string, , , map slice json 바다아이 3108
146 golang golang How to convert JSON string to map and slice, json 바다아이 3265
145 golang golang , file write, Writing Files 바다아이 3435
| |








Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.04084
to webmaster... gogo sea. gogo sea.