Programming/Go
[Go] package public/private access
M0ca
2022. 7. 21. 05:42
반응형
Go에서 로컬 package를 생성하고 접근할 때가 있다.
project_dir/
|
----src/
|
main.go
util/
|
util.go
먼저 util.go부터 보자.
// util.go
package util
type Sample struct {
first int
Second int
}
func function1() {
// empty function
}
func Function2() {
// empty function
}
Sample 구조체는 first와 Second 멤버변수를 가지고 있고 function1()과 Function2() 함수를 가지고 있다.
first 멤버변수와 function1() 함수는 소문자로 이름이 시작된다.
Second 멤버변수와 Function2() 함수는 대문자로 이름이 시작된다.
다음으로 main.go를 보자.
// main.go
package main
import (
"project/src/util" // util package 추가
"fmt"
)
func main() {
utilSampleStruct := util.Sample{1,2} // [1]
fmt.Println(utilSampleStruct) // [2] ok
fmt.Println(utilSampleStruct.first) // [3] error
fmt.Println(utilSampleStruct.Second) // [4] ok
util.function1() // [5] error
util.Function2() // [6] ok
}
[1]에서 utilSampleStruct를 초기화해준다.
[2]에서 utilSampleStruct를 출력한다. 가능하다.
[3]에서는 에러가 발생한다. 특정 패키지(util)에서 소문자로 되어있으면 private로 설정되어 다른 패키지(main)에서 접근할 수 없게 된다. 따라서 컴파일 에러가 발생한다.
[4]는 util패키지의 Sample 구조체의 Second 멤버변수가 대문자로 시작하므로 접근 가능하다.
[5]도 마찬가지로 private로 설정되어 있으므로 main 패키지에서 사용할 수 없는 함수다.
[6]은 public이므로 main 패키지에서 사용할 수 있다.
정리하면 패키지 내부에서 이름의 시작이 대문자면 public으로 다른 패키지에서 접근할 수 있고 소문자면 private로 해당 패키지 내부에서만 사용할 수 있다.
반응형