반응형
Go package & Go init
I. Import & Package
1. 패키지
package main
- 코드의 구조화(모듈화) 및 재사용성 제공
- 패키지 이름 == 디렉터리 명
- 같은 패키지 내에 있으면 소스파일들이 디렉터리명을 패키지 이름으로 사용 (단 main은 제외 => package main은 start point기 때문에 디렉토리 내에 단 하나만 존재해야 함)
- main이 아닌 패키지의 경우 main 메서드가 필요하지 않지만, 단독 실행은 불가
- 패키지 내의 함수가 소문자로 시작하면 Private, 대문자 시작 시 Public
- 독립적인 작은 패키지 단위로 제작하고 조합해 하나의 프로그램을 형성하는 것을 권고함
2. import
package main
import (
"fmt"
"src/mypackage"
)
- 패키지를 사용할 때 import를 이용
- package 내에 Public함수만 접근 가능
- Go에서 제공하는 패키지 외에 사용자가 직접 패키지를 만들어 import 가능
- as 문 가능(alias)
import (
f "fmt"
)
func main(){
f.Println("f로 호출하면 됩니다!")
}
go fmt
가 사용하지 않는 패키지는 자동으로 삭제하기 때문에 사용 예정인 패키지는 아래 첨자로 보호
import (
f "fmt"
_ "src/somedayUse // 포멧터가 패키지를 제거하지 않음
)
...
II. Go init
- 일반적으로
package main
파일을 실행하면func main()
함수가 가장 먼저 동작하는데init()
메서드는 이 법칙을 무시 - 단 init만 존재하는 경우 실행 불가
- 프로그램(main) 실행 전 변수 초기화 등 기본 세팅이 필요한 경우 사용
package call
func init(){
"call init run"
}
...
package main
import (
"fmt"
"src/call"
)
func init() {
fmt.Println("init code")
}
func main() {
fmt.Println("main code")
}
...
>> go run main.go
call init run
init code
main code
- 실행 순서
1 main.go 실행
2 import 확인
3 src/call을 import 하며 call.init() 확인
4 call.init() 실행
5 main.go 의 init() 확인
6 main.init() 실행
7 main.main() 실행
반응형