📌Index
🔎 VScode에서 실습을 진행합니다.
✔️ Package
모든 Go 프로그램은 package로 구성되고, package를 통해서 모듈화 및 코드의 재사용 기능을 제공한다.
Go의 많은 Package들이 표준 라이브러리로 제공하며, 이러한 표준 라이브러리는 환경변수 GOROOT/pkg
경로에 설치되어 있다.
Main Package
일반적으로 Package는 라이브러리 형태로 사용되지만 main
이라고 명시된 package는 라이브러리가 아닌, 실행 프로그램으로 만들게 된다. main.go
로 이름을 지정한다는 것은, 해당 프로젝트를 컴파일 하고 싶다는 뜻이고, 그것을 사용할 것이란 뜻이다. 컴파일 하지 않을 것이라면 다름 파일명 test.go
, learning.go
.. 등으로 지정해도되지만, 컴파일을 할 것이라면 반드시 main.go
로 파일명을 설정해야한다. 이때 main이 진입점이기 때문에, 컴파일러는 패키지의 이름이 main인 것 부터 찾는다.
Go는 우리가 원하는 곳 어디서든 코드를 다운로드 받아 사용할 수 있다.
Go에서 받아온 코드들을 보기좋게 정리하는 방법은 바로 src
디렉토리에 도메인 별로 정리하는 것이다.
자신의 github username으로 src/github.com/[username]
디렉토리를 생성해보자.
mkdir github.com
mkdir github.com/[username]
그리고 해당 디렉토리에 main.go
파일을 생성하자.
main.go
package main
위와 같이 작성해보자. Go에서는 어떤 패키지를 사용하는지 작성해주어야한다.
그러나, 만약 이 상태로 실행한다면 에러가 발생할 것이다.
$ go run main.go
# command-line-arguments
runtime.main_main·f: function main is undeclared in the main package
"main package에 function main이 선언되지 않았다"
Go는 node.js나 python과 달리 특정 function을 찾게되는데, 바로 function main이다.
main.go
package main
func main(){
}
컴파일러는 main package와 그 안의 main function을 가장 먼저 찾고 실행시킨다. 따라서 여기가 시작점이다. C/C++
과 유사하다고 할 수 있다. 다시 실행해보면 에러가 발생하지 않는다.
$ go run main.go
✔️ Import
프로그램에서 Package를 사용하려면 import 키워드를 사용해서 패키지를 포함 시켜야한다.
Hello World!
를 출력해보자.
main.go
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
만약 VScode를 사용한다면,fmt.Println
작성 시 fmt
는 자동으로 import 되게 된다👍
이제 main.go
를 실행해보면,
$ go run main.go
Hello World!
Hello World!
가 잘 출력되는 것을 확인할 수 있다.
만약 여기서 fmt.Println("Hello World!")
를 지우고 저장을 하게되면, import가 자동으로 사라지게 된다. 이도 VScode가 제공해주는 기능이다.
fmt는 Go언어가 가지고 있는 패키지 중 하나로, formatting을 위한 package이다.
fmt.
을 치면, 다양한 function들이 있는 것을 볼 수 있다.
💡여기서 함수 이름이 대문자인 이유가 뭘까??
예시로 살펴보자.
something 패키지를 만들어보자. something
폴더를 만들고 그 안에something.go
파일을 생성한다.
something.go
package something
import "fmt"
func sayBye() {
fmt.Println("Bye")
}
func SayHello() {
fmt.Println("Hello")
}
sayBye()
는 소문자로 시작하고, SayHello()
는 대문자로 시작한다.
이렇게 저장한 상태로 다시 main.go
파일로 돌아온다.
something.
를 치면, SayHello
만 선택지로 보인다.
보이는 것 처럼 something.sayBye()
는 사용할 수 없다.
정리하자면 대문자로 시작하는 function은 export된 function이고, 소문자로 시작하는 function은 private function이다. 따라서 Go에서는 대문자로 작성하는 경우를 자주 볼 수 있고, 대문자로 작성된 function은 다른 패키지로 부터 export된 것이라고 보면 된다.
참고로 만약 이전에 VScode에서 모든 툴과 패키지들을 설치했다면, 패키지 소스코드를 쉽게 확인할 수 있다. fmt 패키지에 관심이 있다면 import fmt
에서 fmt에 마우스를 대고 ctrl+click
혹은 cmd+click
하면 패키지에 관한 모든 것을 확인할 수 있다.
쉽고 빠른 Go 시작하기 – 노마드 코더 Nomad Coders를 바탕으로 작성하였습니다.