Go 언어는
public,private키워드 없이 이름의 첫 글자 대소문자만으로 식별자의 공개 여부를 결정 함수, 변수, 인터페이스 등 모든 식별자에 적용되는 규칙
공개(Public) 식별자와 비공개(Private) 식별자
대문자로 시작하는 이름 → 해당 패키지 외부에서도 접근 가능 (공개)
소문자로 시작하는 이름 → 해당 패키지 내부에서만 사용 가능 (비공개)
1 2 3 4 5 6 7 8 9// 공개 함수 func Reverse(s string) string { return reverseTwo(s) } // 비공개 함수 func reverseTwo(s string) string { // 문자열 뒤집기 }
Public 함수 접근 예시
패키지 구조
1 2 3 4 5 6GolangTraining/ ├── 02_library/ │ └── stringutil/ │ └── reverse.go └── 01_helloWorld/ └── hello.goreverse.go(패키지 내부 함수 정의)1 2 3 4 5 6 7 8 9 10 11 12 13package stringutil func Reverse(s string) string { return reverseTwo(s) } func reverseTwo(s string) string { r := []rune(s) for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { r[i], r[j] = r[j], r[i] } return string(r) }hello.go(외부 패키지에서 import)1 2 3 4 5 6 7 8 9 10package main import ( "fmt" "github.com/goestoeleven/GolangTraining/02_library/stringutil" ) func main() { fmt.Println(stringutil.Reverse("Hello, Go!")) }실행 결과
1!oG ,olleH
Private 함수에 접근하려 할 경우
reverseTwo는stringutil내부에서만 사용 가능하므로, 아래와 같이 사용하면 컴파일 에러 발생1fmt.Println(stringutil.reverseTwo("Hello"))컴파일 에러
1undefined: stringutil.reverseTwo