3장 패키지
go의 경우 각각의 패키지를 개별적으로 가져오기 및 활용이 가능. 덕분에 여타 언어처럼 큰 모듈을 통째로 가져올 필요 없이 필요한 특정 기능만을 가져오는 것이 가능.
모든 .go 파일들은 공백 및 주석을 제외한 첫 줄에 자신의 패키지 이름이 위치해야 함.
동일한 패키지는 동일한 디렉토리에 저장됨. 즉, 하나의 디렉토리에 여러 패키지가 존재할 수 없음.
패키지 이름 규칙
반드시 디렉토리의 이름과 동일해야 한다.
짧고 간결하면 소문자로만 구성되어야 한다.
main 패키지
모든 go 프로그램은 main 패키지를 가져야 한다.
main 패키지 안에는 반드시 main() 함수가 있어야 한다.
main 패키지는 다른 이름의 디렉토리 안에 존재할 수 있으며 이 경우 해당 디렉토리 이름으로 바이너리가 컴파일된다.
command, package
command: Go에서 command는 대부분의 실행 가능한 프로그램을 의미
package: Go에서 package는 import가 가능한 의미적 단위
import
import "package name"
일반 패키지의 경우
GOPATH
를 기준으로 상대 경로 탐색표준 라이브러리 패키지의 경우 Go 설치 경로를 기준으로 탐색
GOPATH
에 나열된 순서대로 하나하나 탐색. 가장 먼저 발견하는 패키지 참조
remote import
네트워크 저장소에서 패키지를 읽어오는 방법
go get
사용
renaming
여러 패키지의 이름이 동일할 때 사용하는 방법
import newName "package"
go의 경우 import한 패키지를 한번도 참조하지 않으면 컴파일러 에러 발생.
참조하진 않지만 꼭 import할 필요성이 있다면 (init() 메소드의 호출 필요 등) 빈 식별자로 패키지 이름 지정
import _ "unused"
init
초기화 작업을 위해 사용하는 함수
main()이 실행되기 전에 먼저 실행됨
DB driver 등 런타임 초기화에서 사용됨
init() 메소드는 필요하지만 패키지 자체를 사용할 일은 없다면 빈 식별자로 패키지 이름 지정 필요
Go 내장 도구 사용
go build
패키지 또는 경로 사용 가능.
패러미터가 없으면 현재 경로 기준으로.
경로에
...
을 넣으면 와일드카드로 동작.
go clean
빌드 결과물 삭제
go run
빌드하고 바로 실행
go vet
코드 정적 검사
go fmt
코드 리포맷
가능한한 많이 사용하는걸 추천. 적어도 커밋하기 이전에는 한번 실행하는게 좋음.
문서화 도구
go doc
CLI 환경에서 사용
패러미터로 패키지 이름 사용
godoc
브라우저로 문서 탐색하고 싶을 때 사용
로컬에 웹서버 띄우는 것도 가능
외부 패키지는 물론 직접 작성한 패키지에 대해서도 문서 제공
의존성 관리
godep
vendor
gopkg.in
vendoring, import path rewriting
모든 dependency를 프로젝트 디렉토리 내부에 복사
dependency를 참조하는 import를 복사한 경로로 재작성
Last updated