일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JUCE 튜토리얼
- C언어
- go
- C++ gui 라이브러리
- 자료구조
- a tour of go
- C++ gui
- 운영체제
- JUCE library
- OS
- Docker
- 백준
- 알고리즘
- BOJ
- LOB
- 프로그래밍
- go channel
- 연결리스트
- 코딩
- tour of go
- C++
- JUCE라이브러리
- C++ library
- gui
- vim-go
- 리듬게임
- JUCE
- Nebula
- 공룡책
- c++ heap
Archives
- Today
- Total
CafeM0ca
[Go] package public/private access 본문
반응형
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로 해당 패키지 내부에서만 사용할 수 있다.
반응형
'Programming > Go' 카테고리의 다른 글
[Go] sort In struct and map (0) | 2021.07.23 |
---|---|
AWS 도메인 연결과 Docker 컨테이너 통신 (0) | 2021.05.11 |
Go 서버 애플리케이션을 Docker로 AWS EC2에 배포 (0) | 2021.05.07 |
[Go] 패키지 네이밍(package naming) (0) | 2021.04.06 |
[Go] Go channel 데이터 파이프라인 (2) | 2021.04.05 |
Comments