Go에서는 애플리케이션을 패키지로 구성해요. 패키지는 같은 폴더에 있는 소스 파일들의 모음이에요. 한 폴더에 있는 모든 소스 파일은 파일 맨 위에 같은 패키지 이름을 써야 해요. 관례상 패키지 이름은 그 패키지가 있는 폴더와 같게 지어요.
package greeting
Go는 방대한 표준 라이브러리 패키지를 제공하고, import 키워드로 프로그램에서 사용할 수 있어요.
표준 라이브러리 패키지는 이름을 그대로 써서 임포트해요.
package greeting
import "fmt"
여러 패키지는 괄호로 묶어 한 번에 임포트할 수 있어요.
package greeting
import (
"errors"
"fmt"
)
서드파티 패키지는 패키지가 있는 위치의 URL을 사용해 임포트해요. 패키지를 임포트할 때 별칭을 붙일 수도 있어요. 이렇게 하면 패키지 이름이 충돌하는 것을 피할 수 있어요:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
임포트한 패키지는 패키지 이름이나 별칭으로 사용해요:
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
Go에서는 다른 패키지의 코드가 어떤 항목을 호출할 수 있는지가 그 항목을 어떻게 선언했는지에 따라 결정돼요.
함수, 타입, 변수, 상수를 외부에 공개하려면(이를 exported라고 해요) 이름이 대문자로 시작해야 해요.
이는 public과 private 같은 접근 제한자를 사용하는 Java 등 다른 프로그래밍 언어와 비슷해요.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
직접 정의한 struct 타입의 필드 이름도 마찬가지예요. 대문자로 시작하는 필드 이름은 외부에 공개되고, 소문자로 시작하는 이름은 공개되지 않아요.