Go 작업 공간이란 무엇이며 어떻게 사용합니까?

이전에 Go 1.18 릴리스의 일부로 추가되는 것에 대해 블로그에 올렸습니다. 이 릴리스에는 "Go 작업 공간"이라는 또 다른 삶의 질 개선 사항이 추가되었습니다.

다음은 릴리스 노트에서 작업 공간에 대해 말한 내용입니다.


이 블로그 게시물에서는 Go 작업 영역이 무엇이고 어떻게 사용하는지 살펴보겠습니다.

이동 모드 교체



코드가 의존하는 Go 모듈 중 하나를 변경하고 싶었던 적이 있습니까? 약간의 인터넷 검색 후 아래와 유사한 작업을 수행하는 자신을 발견했을 수 있습니다.

module test1.18

go 1.18

require golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect

replace golang.org/x/sync => ./local/sync


이것이 우리에게 필요한 전부입니다. 테스트하기 위해 golang.org/x/sync 에서 ./local/sync 로 코드를 복사했습니다. 내 파일 트리는 다음과 같습니다.

그런 다음 errgroup의 기능Go을 약간 수정했습니다.


간단한 기본 기능을 작성했습니다.


예상대로 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

2022/03/21 07:58:10 Let's go!
2022/03/21 07:58:10 did a thing


좋습니다. 모든 것이 작동합니다!

go 1.18 이전에는 한 번에 여러 모듈을 변경할 수 있는 거의 유일한 방법이었습니다. 그런 다음 코드를 커밋하기 전에 go.mod에서 변경 사항을 제거해야 합니다.

작업 공간 소개



작업 공간을 사용하면 이 전체 프로세스가 훨씬 쉬워집니다. 이전에 사용한 go.work 지시문과 동일하게 효과적으로 작동하는 replace 파일을 만들 수 있습니다. 동일한 예를 다시 따르지만 이번에는 작업 공간 파일을 사용합니다.

내 go.mod 파일은 다음과 같이 되돌려집니다.

module test1.18

go 1.18

require golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect


그런 다음 프로젝트의 루트에 go.work라는 새 파일을 만들고 다음을 추가했습니다.

go 1.18

use ./local/sync


그게 다야! go 도구는 작업 공간 파일을 자동으로 감지하고 사용합니다. go run ./workspace/main.go를 실행하면 이전과 동일한 출력이 표시됩니다.

2022/03/21 08:03:43 Let's go!
2022/03/21 08:03:43 did a thing


Go 1.18 베타에서는 다음을 실행할 수 있었습니다.

 go build -workfile=off ./workspace/main.go


작업 파일을 사용하지 않고 코드를 빌드할 수 있지만 프로덕션 릴리스에서는 작동하지 않았습니다. go 도구here에 대해 버그를 제기했는데 릴리스 전에 제거된 것 같습니다.

이제 올바른 방법은 다음 명령을 실행하는 것입니다.

GOWORK=off go run ./workspace/main.go


이를 통해 다음과 같은 결과를 얻습니다.

2022/03/21 08:27:03 did a thing


이는 이제 go.mod 파일의 원래 모듈로 빌드되고 있음을 보여줍니다.

모범 사례 및 경고



커뮤니티의 초기 게시물은 go.work 파일을 커밋하지 않는 것이 바람직하다고 제안합니다. 이는 로컬 개발에 사용되며 모듈에 대한 변경 사항을 만들고 테스트한 후에 평소와 같이 모듈을 푸시하고 태그를 지정한 다음 go.mod 파일에서 참조해야 합니다. 따라서 파일 공유go.work는 의미가 없습니다.
go.work.gitignore를 추가하는 것을 고려하십시오.

하지만 go.work 파일을 푸시하는 경우 명시적으로 해제하지 않는 한 go build를 실행하면 기본적으로 go.work 파일을 사용하는 것처럼 보입니다. 이로 인해 의도치 않게 개발 코드가 포함된 프로덕션 빌드가 발생할 수 있습니다. 따라서 항상 안전을 위해 GOWORK=off go build ./...로 프로덕션 빌드를 실행하는 것이 좋습니다.

마무리



이 정보가 도움이 되었기를 바랍니다. 더 많은 정보를 얻으려면 트위터에서 나를 찾을 수 있습니다.

좋은 웹페이지 즐겨찾기