앞서 Hello World 문자열을 출력하는 코드를 Go로 작성해 보았다.
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
fmt 를 직접 import 한 적이 없는데, IDE 에서 알아서 자동으로 추가해 주었다.
fmt 는 Go 가 가지고 있는 패키지 중 하나로 formatting 을 위한 package 이다.
import 관련해서 javascript 의 경우 function 을 export 해주고 싶은 경우 모듈을 export 하겠다고 명시해 주어야 한다.
Go 에서는 function 을 export 해주고 싶다면 function 을 영문자 대문자로 시작하면 된다.
정말 그런지 확인해보기 위해 현재 프로젝트의 최상위에 'something' 폴더를 만들고 그 안에 'something.go' 파일을 만들었다.
'something.go' 의 파일 내용은 다음과 같다.
package something
import "fmt"
func sayBye() {
fmt.Println("Bye")
}
func SayHello() {
fmt.Println("Hello")
}
여기서 주목할 점은 'SayHello' function 이 영문자 대문자로 시작 한다는 것이다.
그럼 다시 main.go 로 돌아가서 다음과 같이 내용을 추가 한다.
package main
import (
"fmt"
"something"
)
func main() {
fmt.Println("Hello World!")
something.SayHello()
something.sayBye()
}
그랬더니 아예 'something' 자체를 전혀 찾지 못했다.
이유가 무엇일까 생각해보니, 처음 프로젝트를 생성할 때 Go 가 설치되는 기본 경로에 있는 src 디렉토리 하위에서 작업 하기를 권장했었다.
import 해서 쓸 수 있는건 아무래도 이 경로에 있어야 하는것 같아서 그 위치로 새로 만든 'someting'을 옮겨 보았다.
그랬더니 'something' 을 전혀 찾지 못해 발생하던 오류는 사라졌다.
그리고 실행해보니 'sayBye' 에서 다음과 같이 오류가 발생했다.
'cannot refer to unexpected name something.sayBye'
그래서 'something.sayBye' 를 주석처리하고 실행 해봤더니 정상적으로 동작하는걸 볼 수 있었다.
package main
import (
"fmt"
"something"
)
func main() {
fmt.Println("Hello World!")
something.SayHello()
// something.sayBye()
}
마지막으로 지나가듯 언급한 내용인데, 이렇게 function 을 정의할 때 export 하지 않는 것에 대해 영문자 소문자를 사용하는것이 마치 private 접근 제한자를 사용하는 것과 같다.
'프로그래밍 언어 > Go' 카테고리의 다른 글
Go 의 for, range, ...args (0) | 2021.05.16 |
---|---|
Go 의 함수 part 2 (naked return, defer) (0) | 2021.05.16 |
Go 의 함수 part 1 (기본 사용법) (0) | 2021.05.16 |
Go 의 상수와 변수 (0) | 2021.05.16 |
Go 개발 환경 설정과 Hello World (using 'VS Code') (0) | 2021.05.16 |