잠시만 기다려 주세요

     '월급 200 받는 사람이 국회의원 되는 그날까지... 슈퍼기득권 전부 아웃... 국회의원 봉사직 전환을 꿈꾸며... '
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (27)  |  여러가지 팁 (1126)  |  추천 및 재미 (166)  |  자료실 (25)  |  
시사, 이슈, 칼럼, 평론, 비평 (1056)  |  끄적거림 (160)  |  문예 창작 (736)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - golang go.mod go.sum 모듈 관련 문제. GOPATH SRC not module, 1.16 로컬 패키지 사용 문제.
이 름 : 바다아이   |   조회수 : 8991         짧은 주소 : 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 / 7 page
번 호 카테고리 제 목 이름 조회수
184 golang golang postgresql 접속시 콘솔과 실제 golang 프로그램에서 postgresql 접속 시간이 안 맞을 때..timezone 문제.. 바다아이 1457
183 golang golang mariadb, mysql 접속 pooler proxysql 에 관한 설명..!!! mariadb 접속 개선, 연결 속도 증가 설정.. 바다아이 1612
182 golang golnag 받아온 의존 패키지 및 등등...  Go 언어에서 패키지를 업데이트... go get 업데이트... 바다아이 1528
181 golang golang 에서 postgresql + pgx + pgbouncer 사용하기... 기존 설정 그대로 유지하면서 성능 향상 됩니다. pgbouncer 사용, 설명... 바다아이 1639
180 golang golang 문자열 함수 예제... 바다아이 2439
179 golang golang 숫자인지 아닌지 확인하기, 체크하기... 바다아이 5284
178 golang golang 배열 삭제, map 삭제. 바다아이 4254
177 golang Golang 문자열 변환 방법(문자열, 숫자, 등 data 파싱방법) 타입 변환, 형 변환... 바다아이 5206
176 golang golang sort 정렬하기... 바다아이 5313
175 golang golang html.EscapeString html.UnescapeString input value 따옴표 안에 따옴표... 특수문자 치환 바다아이 5090
현재글 golang golang go.mod go.sum 모듈 관련 문제. GOPATH SRC not module, 1.16 로컬 패키지 사용 문제. 바다아이 8992
173 golang go 1.16 컴파일 에러... is not in GOROOT.. 컴파일시 GOPATH 찾지 못하는 문제.... 패키지 모듈 문제. 바다아이 10303
172 golang 문자열 포맷, String Formatting 바다아이 11426
171 golang rand.Intn 랜덤값 구하기, random, 랜덤 난수 발생하기, 알파벳 난수발생. 바다아이 10998
170 golang golang 을 사용하는 회사들 리스트... 바다아이 15239
169 golang golang gopath, goroot 경로 설정하기.. golang 설치하기 바다아이 11797
168 golang golang 파일 다운로드 예제... Force download file example 바다아이 13937
167 golang golang 현재 하드웨어 및 사용현황 구하기, 하드웨어 모니터링, cpu, memory, disk 사용률 보기 바다아이 15107
166 golang golang 원하는 형태로, 여러 종류로 크로스 컴파일 하기... GOOS, GOARCH 바다아이 12426
165 golang golang 체크박스 checkbox 배열 폼 처리... 다중 체크박스 바다아이 12531
164 golang golang 핸들함수, 라우터, http 웹서버 예제.... 바다아이 12322
163 golang golang 에서 nil 을 할당할 수 있는 경우, nil 을 사용할 수 있는 타입, nil 을 사용... 바다아이 12197
162 golang 2년 가까이 golang, go 언어를 사용해본 소감, 후기.... golang 찬양.... 추천 바다아이 15541
161 golang golang 에서 postgresql, mysql, mariadb 다중쿼리 에러날 때... ` Grave (그레이브) 문제 될 때.. 쿼리문 에러.. 바다아이 12856
160 golang golang 으로 postgresql 이나 mysql, mariadb 접속해서 데이터 가져올 때 scan 시 빈값, null 값이 오면 에러나는 문제.. 바다아이 12820
159 golang golang 간편하게 문자 인코딩 변환, iconv 바다아이 15667
158 golang golang quote escape, unquote 바다아이 13020
157 golang golang 웹서버, http errorLog 에러로그 남기기, 저장하기, 기록하기... 바다아이 13489
156 golang golang 인터페이스 interface 예제, 설명 바다아이 12674
155 golang golang 구조체 struct 포인터 개념 정리.... 바다아이 13243
| |







Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 chrome 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Debian + GoLang + PostgreSQL + Mariadb + PgBouncer + ProxySQL]
서버위치 : San Jose Datacenter  실행시간 : 0.04499 초
to webmaster... gogo sea. gogo sea.