Scroll Top

GOLANG – 패키지

GO

패키지

golang 은 패키지(package)를 통해 코드를 모듈화하며 코드의 재사용을 가능케 한다. go는 패키지를 이용해 작은 단위의 컴포넌트를 작성하고 이러한 패키지를 활용해 프로그램을 작성할 것을 권장한다.

MAIN

‘main’ 으로 정의된 패키지는 Go Compiler에 의해 특별하게 인식된다.

만약 패키지가 main 인 경우 컴파일러에선 해당 패키지를 공유 라이브러리가 아닌 실행(executable) 프로그램으로 인식한다. 그리고 main 패키지 안의 main() 함수가 프로그램의 시작점이 된다.

따라서 패키지를 공유 라이브러리로 만들고 싶을 경우 패키지 명을 main 으로 사용해선 안된다.

Package Scope

패키지 내에 함수, 메소드, 구조체 등이 있는데 이러한 이름의 첫 문자를 대문자로 시작한다면 public 으로 간주되어 외부에서 호출할 수 있다.
만약 첫 문자가 소문자인 경우 같은 패키지 내부에서만 호출할 수 있다.

package 를 사용할 때 import 는 폴더를 의미하며 만약 import “pub_package” 를 할 경우 pub_package 내부의 파일을 불러들인다.

추가로 패키지를 작성할 때 init() 함수를 작성한다면 패키지가 로드될 때 자동으로 호출할 수 있다.

package main // main.go

import (
        "fmt"
        "pub_package"
)

func main() {
        fmt.Println("main.go : pub_package 의 text.go 호출")
        pub_package.Text()
        fmt.Println("main.go : pub_package 의 int.go 호출")
        pub_package.Int()
}
package pub_package // text.go

import "fmt"

func Text() {
        fmt.Println("text.go : 함수 호출")
}
package pub_package // int.go

import "fmt"

func init() {
        fmt.Println("int.go : init 함수 호출")
}

func Int() {
        fmt.Println("int.go : 함수 호출")
}
┌──(daleji㉿HACK)-[~]
└─$ go run main.go
int.go : init 함수 호출
main.go : pub_package 의 text.go 호출
text.go : 함수 호출
main.go : pub_package 의 int.go 호출
int.go : 함수 호출

별칭

가끔 패키지의 init() 만 호출하고 이후 사용하지 않을 경우가 있다. 이 때 _ 를 사용해 init() 만 호출할 수 있다.

또한 패키지에 alias 로 별칭을 지어줄 수 있다. 이 경우 패키지 이름 앞에 적어주면 된다.

import (
        _ "pub_package" // init() 만 실행
        http "/http/conf" // http 으로 별칭 지정. 향후 http.func() 형태로 사용 가능
        log "/http/log"
)

패키지를 찾기 위해선 GOROOT 와 GOPATH 를 순차적으로 찾게 된다.

따라서 일반적인 경로인 (리눅스 기준) /usr/local/go/src/ 아래가 아닌 환경변수를 통해 다른 위치에 패키지를 만들 수 있다.

Related Posts

Leave a comment

You must be logged in to post a comment.