패키지
패키지란 Go언어에서 코드를 묶는 가장 큰 단위이다.
main 패키지는 특별한 패티지로 프로그램 시작점을 포함한 패키지이다.
프로그램이 실행되면 운영체제는 프로그램을 메모리로 올린다. 이것을 로드라고 한다.
그런 다음 프로그램 시작점부터 한 줄씩 코드를 실행한다.
프로그램의 시작점이 main() 함수이고, main() 함수를 포함한 패키지가 main 패키지이다.
한 프로그램은 main 패키지 외에 다수의 다른 패키지를 포함할 수 있다. 원하는 기능을 제공하는 패키지가 있다면 import해서 사용하면 된다. 페키지를 찾기 위해 아래의 사이트를 참고할 수 있다.
Standard library - pkg.go.dev
Directories ¶ Expand all tar Package tar implements access to tar archives. Package tar implements access to tar archives. zip Package zip provides support for reading and writing ZIP archives. Package zip provides support for reading and writing ZIP arch
pkg.go.dev
패키지 사용하기
겹치는 패키지 문제 별칭으로 풀기
만약 패키지명이 겹치면 별칭을 줘서 구별해준다.
import (
"text/template"
htemplate "html/template"
)
사용하지 않는 패키지 포함하기
패키지를 가져오면 반드시 사용해야한다.
패키지를 직접 사용하지 않지만 부가효과를 얻고자 임포트하는 경우에는 밑줄 _을 패키지명 앞에 붙여주면 된다.
패키지 설치하기
import로 패키지를 포함시키면 go build를 통해서 빌드할 때 해당하는 패키지를 찾아서 포함한 다음 실행 파일을 생성한다.
아래와 같은 세가지 방법으로 패키지를 찾는다.
- Go언어에서 기본 제공하는 패키지는 Go 설치 경로에서 찾는다.
- 깃허브와 같은 외부 저장소에서 저장된 패키지의 경우 외부 저장소에서 다운받아서 GOPATH/pkg 폴더에 설치한다.
- 현재 모듈 아래 위치한 패키지인지 검사한다. 현재 모듈 아래 위치한 패키지는 현재 폴더 아래 있는 패키지를 찾는다.
Go 모듈
Go 모듈은 Go 패키지들을 모아놓은 Go 프로젝트 단위이다.
go build를 하려면 반드시 Go 모듈 루트 폴더에 go.mod 파일이 있어야 한다.
go.mod 파일은 모듈 이름과 Go 버전, 필요한 외부 패키지 등이 명시되어 있다.
Go언어에서는 go build를 통해 실행 파일을 만들 때 go.mod와 외부 저장소 패키지 버전 정보를 담고 있는 go.sum 파일을 통해 외부 패키지와 모듈 내 패키지를 합쳐서 실행 파일을 만든다.
Go 모듈은 go mod init 명령을 통해 만들 수 있다.
go mod init [패키지명]
go mod tidy 명령은 Go 모듈에 필요한 패키지를 찾아서 다운로드해주고 필요한 패키지 정보를 go.mod 파일과 go.sum 파일에 적어준다.
go mod tidy
패키지명과 패키지 외부 공개
패키지 전역으로 선언되 첫 글자가 대문자로 시작되는 모든 변수, 상수, 타입, 함수, 메서드는 패키지 외부로 공개된다.
패키지 초기화
패키지를 임포트하면 컴파일러는 패키지 내 전역 변수를 초기화한다.
그런 다음 패키지에 init()함수가 있다면 호출해 패키지를 초기화한다.
init()함수는 반드시 입력 매개변수가 없고 반환값도 없는 함수여야 한다.
만약 어떤 패키지의 초기화 함수인 init()함수 기능만 사용하기를 원할 경우 밑줄 _을 이용해 임포트한다.
✅ 패키지를 임포트하면 패키지 초기화가 시작되는데, 이때 먼저 패키지의 모든 전역 변수들이 초기화되고, 그 다음에 init()함수가 호출된다.
'Programming language > Golang' 카테고리의 다른 글
[Go] Method (0) | 2022.09.08 |
---|---|
[Go] Map 의 특정 key나 value 값으로 정렬하기 (0) | 2022.02.23 |
[Go] ch15 문자열 (0) | 2022.01.18 |
[Go] ch14 포인터 (0) | 2022.01.15 |
[Go] ch13 구조체 (0) | 2022.01.15 |