프로그래밍/GO

Getting started with multi-module workspaces 멀티 모듈 워크스페이스

autostar 2023. 2. 22.
반응형

# Go work 는 뭐하는 것인가?

워크스페이스에서 모듈관리하는 거라고 볼 수 있습니다 아래 예시처럼 

workspace 디렉토리에서 하위 모듈을 사용 할 수 있어 여러 모듈을 관리하기 좋습니다.

 

# Prerequisites

  1. Go 1.18 이후 버전
  2. command terminal

# Module 만들기

학습할 디렉토리에서 workspace 디렉토리를 만듭니다.

하위 폴더에 또 다시 hello 를 만들어 봅니다.

go.mod 파일을 만듭니다.

go mod init test/hello

simple 하게 만듭니다.

오늘은 윈도우에서..

 

 

stringutil.Reverse 함수는 스트링을 뒤집어주는 함수인데 스탠다드 패키지에 들어있습니다.

 

고랭 공홈에 나와있는 예제를 다운받아서 활용합니다.

go get golang.org/x/example

go run 으로 실행시면 보기와 같이 거꾸로 되어있습니다.

 

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

여기까지 일반적인 방법으로 패키지를 다운받아 그걸 이용해 보았습니다. 

이제 워크스페이스를 만들어봅니다.

# workspace 만들기

go work init ./hello

go.work 파일안을 보면 

go 1.18

use ./hello

go.mod 파일과 비슷한 형태를 보입니다.

 

여기서 빌드할때  ./hello가 메인 모듈이어야 합니다.

 

Go 커맨드는 디렉토리를 벗어나 실행하려고 하면 어떤 모듈을 실행할지 모르기 때문에 에러를 내지만

 

위 예시처럼 상위 디렉토리에서 go.work 를 통해 모듈을 지정해서 실행 가능합니다.

 

 

 

#  golang.org/x/example 모듈 다운 받고 수정하기

워크스페이스 디렉토리에서 예제를 다운 받습니다.

git clone https://go.googlesource.com/example

한번더 go.work use 를 합니다.

go work use ./example

 

example/stringutil 디렉토리 안에 파일을 하나 만들어줍니다.

 

 

# 워크스페이스 실행해보기

 

아까 실행해봤던 hello 파일에서 수정을 조금 해줍니다. stringutil 패키지 안에 만든 ToUpper를 사용해봅니다.

 

실행을 하면 Hello 가 전부 대문자로 출력되는걸 확인 할 수 있습니다. (직접 해보세요^^)

 

go.work 은 go mod -replace 대신에 사용하여 로컬 패키지를 이용 할 수 있습니다.

한 워크스페이스에서 두가지 모듈을 사용하니 수정하기도 쉽습니다. 

필요한것만 사용하여 패키지 사용량을 감소 시켜 사용할 수도 있는 툴이니, 앞으로 잘 이용해 봐야겠습니다.

 

 

# Go work 커맨드

go work use [-r] [dir] 디렉토리가 있으면 대체하고 없으면 없애버립니다. 

go work edit 은 go mod edit 과 비슷하게 동작합니다.

go work sync 는 디펜던시를 싱크합니다.

 

https://go.dev/ref/mod#workspaces

반응형

댓글