일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- C
- mutex
- c++
- File
- window
- go언어
- Python
- http
- package
- range
- install
- GO 언어
- json
- FOR
- 리뷰
- Sync
- Callback
- API
- 책
- channel
- tcp
- bitcoin
- Close
- go
- JavaScript
- Golang
- Linux
- windows
- 영화
- write
- Today
- Total
Code Habit
Go ) 패키지 본문
Go 패키지
Go는 패키지(Package)를 통해 코드의 모듈화, 코드의 재사용 기능을 제공한다. Go는 패키지를 사용해서 작은 단위의 컴포넌트를 작성하고, 이러한 작은 패키지들을 활용해서 프로그램을 작성할 것을 권장한다.
Go는 실제 프로그램 개발에 필요한 많은 패키지들을 표준 라이브러리로 제공하고 이러한 표준 라이브러리 패키지들은 GOROOT/pkg안에 존재한다. GOROOT 환경변수는 Go 설치 디렉토리를 가리키는데, 보통 Go 설치시 자동으로 추가된다. 윈도우에서는 Go를 설치했을 경우 디폴트로 C:\go에 설치되며, GOROOT는 C:\go를 가리킨다.
Go에 사용하는 표준패키지는 https://golang.org/pkg에 에 자세히 설명되어 있다.
Main 패키지
일반적으로 패키지는 라이브러리로서 사용되지만, "main"이라고 명명된 패키지는 Go Compiler에 의해 특별하게 인식된다. 패키지명이 main인 경우, 컴파일러는 해당 패키지를 공유 라이브러리가 아닌 실행(executable) 프로그램으로 만든다. 그리고 이 main 패키지 안의 main() 함수가 프로그램의 시작점 즉 Entry Point가 된다. 패키지를 공유 라이브러리로 만들 때에는, main 패키지나 main 함수를 사용해서는 안된다.
패키지 Import
다른 패키지를 프로그램에서 사용하기 위해서는 import를 사용하여 패키지를 포함시킨다. 다음은 Go의 표준 라이브러리인 fmt 패키지를 포함하고 사용하는 예제이다.
package main
import "fmt"
func main(){
fmt.Println("Hello")
}
|
패키지를 Import할 때, Go 컴파일러는 GOROOT 혹은 GOPATH 환경변수를 검색하는데, 표준 패키지는 GOROOT/pkg에서 기타 다른 패키지들은 GOPATH/pkg에서 찾게 된다. GOROOT 환경변수는 Go 설치 시 자동으로 시스템에 설정되지만, GOPATH는 사용자가 지정해주어야 한다.
패키지 Scope
패키지 내에는 함수, 구조체, 인터페이스, 메서드 등이 존재하는데, 이들의 이름(Identifier)이 첫문자를 대문자로 시작하면 이는 public으로 사용할 수 있다. 즉, 패키지 외부에서 이들을 호출하거나 사용할 수 있게 된다. 반면, 이름이 소문자로 시작하면 이는 private로 패키지 내부에서만 사용할 수 있다.
패키지 init 함수
개발자가 패키지를 작성할 때, 패키지 실행시 처음으로 호출되는 Init() 함수를 작성할 수 있다. 즉 Init함수는 패키지가 로드되면서 실행되는 하수로 별도의 호출 없이 자동으로 호출된다.
package test
func init(){
fmt.Println("Init package")
}
|
위의 init() 함수는 test 패키지 import시 호출된다.
웹 패키지
golang은 로컬에 있는 패키지뿐만 아니라 인터넷의 소스 저장소에 올라와 있는 패키지도 사용할 수 있다.
Go 언어에서 지원하는 소스 저장소와 버전 관리 시스템은 다음과 같다.
- GitHub: Git
- BitBucket: Git, Mercurial
- Launchpad: Bazaar
- IBM DevOps Services: Git
먼저 소스 저장소의 패키지를 사용하기 전에 소스 저장소에서 사용하는 버전 관리 시스템을 설치해야 한다. Windows와 Mac OS X는 다음 주소에서 설치 파일을 받아서 설치한다.
- Git: http://git-scv.com/downloads
- Mercurial: http://mercurial.selenic.com/downloads
- Subversion: https://subversion.apache.org/packages.html
- Bazaar: http://wiki.bazaar.canonical.com/Download
리눅스에서는 다음 명령으로 각 버전 관리 시스템을 설치한다.
< Git >
$ sudo apt-get install git // 우분투
$ sudo yum install git // CentOS
< Mercurial >
$ sudo apt-get install mercurial // 우분투
$ sudo yum install mercurial // CentOS
< Subversion >
$ sudo apt-get install subversion // 우분투
$ sudo yum install subversion // CentOS
< Bazaar >
$ sudo apt-get install bzr // 우분투
$ sudo yum install bzr
|
다음과 같이 사용한다.
import (
"fmt"
"github.com/golang/example/stringutil"
)
import (
"fmt"
. "github.com/golang/example/stringutil" // 전역 패키지
)
import (
"fmt"
strutil "github.com/golang/example/stringutil" // strutil로 별칭
)
|
이제 콘솔에서 소스가 위치한 디렉터리로 이동해 "go get" 명령을 실행하면 .go 파일에서 import로 설정한 GitHub 주소에서 패키지를 자동으로 받아온다. GOPATH/src 디렉터리를 보면 github.com/golang/example 디렉터리가 만들어져 있고, 패키지의 소스가 들어 있다.
다음과 같이 go get <저장소 주소> 형식으로 명령을 실행하면 바로 패키지를 받아올 수도 있다.
go get github.com/golang/example/stringutil
|
이때는 패키지를 받아오기만 한다. 따라서 이 패키지를 사용하려면 import로 패키지 주소(패키지 이름)를 설정해야 한다.