프로그래밍/GO

module 에 대해 공부해볼까 import cycle now allowed

autostar 2021. 3. 29.
반응형

좋아 고랭도 깔았으니 이제 그동안 유튜부를 보며, 문서들을 보며 갈고 닦은 내 실력을 마음껏 발휘할때가 되었어!

 

일단 해보고 싶은거 부터 해볼까? 삐빅 Error 

 

?! 

 

아... 음..  뭐 다운이 안된다고?? 나 하란대로 했는데 맞게 했는데... 다시 깔고 영상보면서 재도전.

 

후우 이젠 되겟지

 

삐빅 Erorr 

 

이거 뭐지 내꺼 버전이 다른가?? 뭐야 임포트하는 저주소에 v2라는게 접속이 안되잖아? 

깃허브에서 v2라는 폴더 검색중 그런폴더는 없는걸 알게됨. 아... 모야 저 폴더가 없어서 그런거구나

*v2 를 지우니 뭔가 작동되는거 같다*

그다음에 또 안됨...

 

하 모지? 임포트 사이클 낫 얼라우드????

그냥 따라만 하는데 임포트 사이클이라고 할게 없는데????딸랑 한페이지 복사한건데????

 

그렇게 폭풍 검색햇따... 아무리 생각해도 모듈의 패키지 버전 체크 오류인거 같았다.

 

-----------------------------------------------------------------------------------------------------------

 

중략

 

----------------------------------------------------------------------------------------------------------

 

모듈의 정확한 매커니즘 및 코드를 제대로 돌려본적이 없었으니 아는것도 다시 차근차근 해보자

 

유튜브 영상은 시간이 너무 많이 소요되고 내가 또 게을러지기도 하고 내가 필요한 내용이 아닌것도 주니까 아무튼 문서를 보고 시작해보자

 

커맨드센터에서 

cd %HOMEPATH%

눌러서 홈경로에 간다.

맥이나 리눅스라면 

cd

만 눌러서 간단히 이동하고

 

여기 홈 경로에 hello 라는 디렉토리를 만들거다

(지금 모듈연습하려고 하는데 헬로월드 찍는거 부터 할거 같은 냄새가 강하게 진동한다)

 

cmd 커맨드 프롬프트에서 혹은 배쉬

mkdir hello 로  hello 라는 폴더를 만들고!

파워쉘은 new-item -path:c:/users/(유저이름)/hello -itemtype directory 으로 만드는데 

많이 쳐야하고 복잡하니까 그냥 cmd로 하는거 추천

 

cd hello 만든폴더로 이동한다.

 

자 이제 코드를 추적하게 할수 있는 의존성을 입력할거다. (디펜던시)

커맨드를 하나 입력할건데 go.mod 파일이 하나 생기는데 이 파일이 임포트 하는 파일들, 모듈같은거를 추적하며 버전 관리까지 해주게 될것이다.

by

go mod init

으로

 

go.mod 파일은 우리가 작성하는 코드와 같은 디렉토리에 존재하게 될것이다.

 

go mod init 에 모듈 이름, 경로를 적어주면 go.mod 파일에 module example.com/hello 이런식으로 생성된다. 

대부분의 경우 리파짓토리, 즉 소스코드가 있는 경로에 위치하게 될것이다. 자신이 만든 모듈을 올리려면 경로는 go 툴이 다운로드가 가능해야 한다.

 

후.. 부연설명은 집어치우고

 

바로 들가자

 

go mod init example.com/hello

하면 go mod 파일이 생성된다.

텍스트에디터 나같은 경우는 vscode 쓰고 있는데 고 에디터로 liteide 혹은 젯브레인에서 만든 go land가 인기가 있지만 유료다. liteide 나 vscode 추천한다.vs코드는 그냥 다른언어 쓸때부터 익숙해지려고 다른 ide 안쓰고 이것만 쓴다. 

 

vscode 도 지원잘 되는거 같으니 

 

암튼 에디터로 go.mod 파일 열어보면 module 경로, 이름 이 나온다. 그리고 고 버전이 나오는데 여기서 버전 및 경로 를 관리해준다고 생각하면 된다.

 

이 모듈은 gopath에 저장이 되는데 이건 보통 c:/users/(윈유저이름)/go 에 지정이 된다.

여기에 bin폴더, src폴더, pkg 폴더 가 있다. pkg (패키지) 폴더 아래 mod에 들어가면 배포자별로 폴더가 나뉘어 있다.

example.com/hello 에 우리가 만든 모듈이 잇을것이다.

라고 자신있게 말했는데 사실 틀렸다.

저 경로는 go get으로 다운로드 받는 모듈들이 들어갈것이다.

 

결론적으로 

go mod init 을 하면 그냥 go mod 파일이 생성됨.

하지만 init을 할때 모듈 경로와 이름을 넣어줘야하고, mod 파일안에는 경로와 모듈이름, 버전이 기록된다.

 

 

좋아 그럼 이제 써볼까?

 

package main

import "fmt"

func main() {

  fmt.Println("Hello, World!")

}

hello.go 파일 만들고 위 코드를 복붙한다.

계속 같은 경로이니까 hello 라는 폴더 안에 있어야함.

 

패키지 - 함수를 묶는 방법중 하나. 모든 파일이 하나의 디렉토리에 있다.

임포트 - 여기서 fmt 를 썻는데 이건 고랭의 기본 라이브러리이고, 텍스트 담당일진이다. 프린트 한다하면 fmt 호출각

func - 함수 호출할때 요걸로 한다.

main - 메인함수는 무조건 있어야 하고, 파일에 하나만 있어야 한다. 

 

 

 

 

자, 이제 코드를 실행시켜볼차례

 

커맨드창에 

vscode 에서는 컨트롤 쉬프트 백틱 누르면 커맨드창이 열린다.

경로를 확인하고 파일이 있는곳에서 

고 달려 쩜

go run . 

누르면 현재경로의 고파일을 실행한다.

코드창에서 실행단축키 - 컨트롤 알트 n 혹은 컨트롤 f5 해도 된다.

 

지금은 바로 실행하지만 나중엔 exe파일을 만드는 build 라는 커맨드도 쓸때가 있을것이다.

 

 

헬로월드 인사를 잘 받았나요?

 

이외에도 go help 라는 커맨드도 구경하라고 한다.

 

 

 

 

 

여기부터 진짜 우리의 목적인 패키지에대해 다룬다.

 

pkg.go.dev - 패키지 센터 같은곳 

 

여기서

rsc.io/quote를 임포트 할거인데 

이패키지엔 

Glass() string

Go() string

Hello() string

Opt() string

함수가 있는데, 우린 Go 함수를 이용할것이다.

 

package main

import "fmt"

import "rsc.io/quote"

func main() {

  fmt.Println(quote.Go())

}

 

그럼 rsc.io/quote

빨간펜이.. 아니 빨간줄이 그어져잇다. 고놈 ㅅㄲ가 없다고 하는건데

이해해주자. 일단은 쟤가 찾을수 있는데에 없어서 그런거니깐

 

go mod tidy 

커맨드에 뙇 눌러주자

그럼 디펜던시(의존성)를 확인해서 자동으로 임포트 할거 찾아서 다운로드를 한다.

어떤 패키지를 쓸지 알면 이렇게 간단하게 다운 받을수 있다.

ㅇㅇ

 

난 라이브러리 쓰려고 go get 썻었는데 이게 문제였나

 

아무튼 여기까지 하면 지 맘대로 버전에 맞는걸 가져와서 빨간줄을 지워준다.

 

고 런을 해볼까?

 

이상한 말을 한다. 

Don't communicate by sharing memory, share memory by communicating.

기억을 나누려 대화하지 마라, 대화를 해서 기억을 나누어라

한마디로 자연스러운 대화를 해라 그럼 기억을 자연스럽게 나누게 된다라는 말이네요

 

프린트를 Go()말고 Hello 로도 바꿔서 해봅시다.

 

한글이 튀어나오네요 ㅋㅋㅋㅋ 세상 당황.

 

 

힘들군요. 오늘은 여기까지하는걸로!

 

package main

 

import "fmt"

 

func main(){

  fmt.Println("그럼 이만")

}

 

 

 

-----------------------------------------------------------------------------------------------------------

 

 

 

 

 

짐작컨데 여태까지 모듈을 불러서 해본결과 라이브러리 계속 호출할때마다 에러 낫던건 계속 go get 해서 인듯 하다.

 

그런듯 한데?? import 만 하고 다시 시도해봐야겟다.

 

그럼 v2 라는 버전은 소스코드 어디에 체크가 되어서 고가 알수 있는걸까? 라는 고민을 

 

 

맞네!! 그냥 go mod tidy 하니까 된다.

 

이렇게 간단한 걸 몇일간 눈알이 빠지도록 삽질했다니 뿌듯하면서 자괴감이 드네?? 앞으론 문서를 차근차근 해봐야겟다.

 

반응형

'프로그래밍 > GO' 카테고리의 다른 글

모듈 만들기 creating a module  (0) 2023.02.21
Golang 처음부터 시작해보기  (0) 2023.02.21
go로 web application 만들기  (0) 2021.05.26
고(go) 에디터 플러그인 및 IDE  (0) 2021.04.05
좌충우돌 고랭 입문기  (0) 2021.03.27

댓글