티스토리 뷰

Programming Language/Go

[Go] 패키지

SdardewValley 2021. 10. 23. 18:00
반응형

패키지

코드를 구조화하고 재사용하기 위한 단위
  • Go 프로그램은 패키지로 구성됨
  • Go의 코드는 패키지 선언으로 코드를 시작
  • 다른 패키지 import 가능
  • 패키지 이름과 디렉토리는 동일
  • 같은 패키지를 가지는 소스 파일은 모두 동일한 디렉토리에 위치
  • 라이브러리, 모듈과 비슷한 의미를 가짐

 

💡 패키지 이름 convention

  • 소문자로 구성
  • 소스 파일 하나로 구성된 패키지는 패키지 이름과 소스 파일 이름을 통일

패지키 이름과 소스 파일이름이 일치하게 변경

 

https://pkg.go.dev/std

 

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

위의 사이트에 들어가면 go의 기본 패키지를 알 수 있다. 

 

import "fmt"
import "strings"

import (
    "fmt"
    "strings"
)

go에서는 위의 두 방식으로 패키지를 import할 수 있다.

 

여러가지 패키지를 import 할 때는 (소괄호)를 사용하여 import하는 것이 편리하다.

 

(패키지 이름).(가져올 대상)과 같은 방식으로 패키지에서 필요한 것들을 가져와서 사용할 수 있다.

 

go 패키지의 종류

  • 실행 프로그램: 패키지 이름이 main인 경우
  • 라이브러리

실행파일

main 패키지를 필행하면, 디렉토리 이름과 같은 이름의 실행파일이 생성된다.

 

빌드 명령어
실행파일이 생성된 모습

 

pkg 디렉토리에서 go build로 main 파일을 빌드하면, pkg라는 이름을 가진 실행파일이 생성된 것을 확인할 수 있다.

 

라이브러리

main 패키지 외의 패키지들은 모두 라이브러리로 생성된다. 

 

프로젝트 구조

src 디렉토리 아래에 lib.go 파일을 생성하였다.

 

package lib

func IsDigit(c int32) bool {
	return '0' <= c && c <= '9';
}

lib.go의 내용이다. 이 파일은 문자가 숫자인지 판단하는 함수 IsDigit이 있다.

 

import (
	"awesomeProject/src/lib"
	"fmt"
)

func main() {
	fmt.Println(lib.IsDigit('6'))
}

라이브러리를 import하고 IsDigit 함수를 불러보았다.

 

실행결과이다.

 

접근제어

식별자가 대문자로 시작하면 외부에서 접근할 수 있다.

 

식별자가 소문자로 시작하면 외부에서 접근이 불가능하지만, 패키지 내부에서는 접근할 수 있다.

 

func main() {
	fmt.Println(lib.IsDigit('6'))
	fmt.Println(lib.isDigit('6'))
}
func IsDigit(c int32) bool {
	return '0' <= c && c <= '9';
}

func isDigit(c int32) bool {
	return '0' <= c && c <= '9';
}

실행 결과

IsDigit은 대문자로 시작하고 외부에서 접근 가능하다. 하지만, isDigit은 접근이 불가능하고 main을 실행하면 에러가 발생한다.

 

alias

패키지 이름에는 별칭(alias)를 붙일 수 있다. 패키지 이름이 길거나 혹은 이름이 중복되는 경우 별칭을 유용하게 사용할 수 있다.

 

import (
	mylib "awesomeProject/src/lib"
	"fmt"
)

lib 패키지에 mylib이라는 별칭을 붙여주었다.

 

언더바(_) 식별자

import한 패키지를 사용하지 않았을 때 결과

Go에서는 import 한 패키지를 사용하지 않으면 컴파일 에러가 발생한다. 이 때,  언더바(_)를 식별자로 사용하면 에러가 발생하지 않는다.

 

 

init() 함수

init 함수는 패키지가 로드될 때 가장 먼저 호출된다. 패키지를 호출할 때 사용할 수 있다.

 

var v rune

func init() {
	v = '1'
}
func main() {
	fmt.Println(lib.IsDigit(v))
}

main은 init 함수가 실행된 다음 실행된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
29 30
글 보관함