Package란?
다른 사람이 만든 함수들의 모임이라고 정의 할 수 있다. 프로그래밍을 하면은 수많은 Package를 설치 하게 됩니다.
Package는 어디에 설치 되는가?
인터텟의 튜토리얼을 보면 이거 설치 하시고 저거 설치 하세요 라는 경우가 많다. 설치까지는 좋다 그런데 어디에 설치 되어있는지 몰라서 Package 관리가 안된다.
1. 우선 pkg를 설치해 보자
필자는 web api를 만들 것이니 gin-swagger를 설치해서 api 테스트 해보록 하겠습니다.
설치 방법은 github.com/swaggo/gin-swagger여기서 참조 했습니다.
1.1 swag cli 다운로드
#go get github.com/swaggo/swag/cmd/swag@latest
자 위와 같이 설치하면 도대체 어디에 설치가 되는 것일까 이제 궁금 할 겁니다.
결론은 환경변수 GOPATH에 설정된 경로의 pkg 하위에 설치가 됩니다.
GOPATH 경로에 가서 보면 알아서 bin, pkg 디렉토리가 생성되어 있습니다.
go env 명령어로 확인한 필자의 GOPATH 위치 입니다.
해당 위치에 가서 설치된 상태를 보겠습니다. bin 하위 swag 실행 파일이 존재 하는 것을 볼 수 있고, pkg 하위에 swaggo 가 잘설치 된것 을 볼수 있습니다.
Package는 설치 get의 세부 옵션
Version 표기 : major.minor.patch
#go get : lastest 버전을 받아 옵니다. major.minor.patch 모두 최신 입니다.
- Ex)#go get github.com/swaggo/swag/cmd/swag@latest
#go get 버전 지정시 해당 버전만 받아 옵니다.
-Ex)#go get github.com/swaggo/swag/cmd/swag@v1.6.1
#go get -u : major를 제외한 minor 및 patch 버전이 최신으로 업데이트가 진행됩니다.
- Ex)#go get -u github.com/swaggo/swag/cmd/swag
#go get -u=patch : 패치버전까지만 최신버전으로 업데이트합니다. minor 버전은 업데이트 되지 않습니다.
- Ex)#go get -u=patch github.com/swaggo/swag/cmd/swag
프로젝트의 Package는 어떻게 관리 되는가?
프로젝트내의 source code와 연관된 Package는 go.mod파일에 모두 기록 됩니다.
그리고 go.mod 파일은 go mod 명령어를 통해서 관리가 됩니다.
go mod 명령어는 go 1.11 이상 부터 지원하며, go 1.13 부터는 기본으로 지정 되었습니다.
go mod를 사용항 go.mod 생성 방법
1. go.mod 초기화 및 go.mod 파일 생성
# go mod init {package name}
- {package name} 규칙 : github.com/<사용자>/<레포이름>
Ex) go mod init github.com/doitnowman/test_server
2. 소스 코드 작성
#vim main.go
3. 소스내 의존성을 go.mod 파일에 정리
#go mod tidy
- tidy 옵션은 누락 된 모듈 추가 및 사용하지 않는 모듈 제거를 합니다.
4. go.sum 파일 유효성 검사
#go mod verify
실제로 Package관리는 어떻게 해야 할까?
결론
go get 명령어로 하나하나 package를 받을 필요없음, go가 알아서 source code의 import 부분을 참조해서 필요한 package를 모두 다운 받음. 단 source code에 없는 것은 go get으로 받거나 go mod tidy를 한번 실행 해야 합니다.
실제로 gin swagger sample code를 생성후 go mod tidy 하면 필요한 package를 다 다운 받습니다.
1. gin swagger sample code
- /root/test_server 하위에 src 폴더를 만든후 main.go 파일에 다음 내용을 붙여 넣습니다.
main.go 내용
package main
import (
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
_ "github.com/swaggo/gin-swagger/example/basic/docs" // docs is generated by Swag CLI, you have to import it.
)
// @title Swagger Example API
// @version 1.0
// @description This is a sample server Petstore server.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host petstore.swagger.io
// @BasePath /v2
func main() {
r := gin.New()
url := ginSwagger.URL("http://localhost:8080/swagger/doc.json") // The url pointing to API definition
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
r.Run()
}
2. go mod tidy
- 필요한 package를 다 다운 받습니다.
3. 다운 받은 패키지 확인
#cat go.mod
3. 실행
#go run main.go
web 접속 화면 swagger의 sample page가 잘나옵니다.
CORS에 거린 화면
- 기본 url 설정이 localhost 이기때문에 cors가 걸립니다. 그럴때는 localhost를 IP로 변경해주세요)
정상 화면
참조 싸이트
'ProgrammingLang > Go' 카테고리의 다른 글
[go] 개발에 도움되는 오픈소스 (0) | 2023.01.18 |
---|---|
[Go Lang] package xx is not in GOROOT (/snap/go/9028/src/xx) 해결 방법 (0) | 2022.03.03 |
[Go Lang] 4. 실전 - http server + swagger 만들기 (0) | 2021.04.14 |
[Go Lang] 2. 핵심 문법 (0) | 2020.06.09 |
[Go Lang] 1. 프로그램의 기본 구조 (0) | 2020.06.09 |