
Go의 package는 코드를 묶는 기본 단위이다. 따라서 모든 코드는 반드시 패키지로 묶어야 한다. Go는 패키지를 통해 작은 단위의 컴포넌트를 작성하고, 이러한 작은 패키지들을 활용해서 프로그램을 작성한다.
package는 main package와 그 외 package로 나뉜다.
프로젝트를 컴파일 하고 싶다면 이 패키지의 이름에 대해서는 선택권이 없다!
자동적으로 컴파일러는 main package와 그 안에 있는 main function을 먼저 찾고 실행시키기 때문이다.

목적에 따라 프로젝트 컴파일이 필요가 없을 수도 있다.
공유를 위한 라이브러리를 만든다든지, 오픈소스에 기여한다든지..
이 경우 굳이 main.go가 아니여도 된다.
이러한 것들은 컴파일 되지 않는다. 단지 기능들의 묶음이라든가 다른 사람들이 사용할 수 있도록 하는 데에 목적을 갖는 공유 라이브러리의 역할을 한다.

해당 코드는 "Hello world!"를 출력하는 코드로, fmt package는 표준 라이브러리 패키지이다.
이때, Println이 대문자로 시작하는 것에 주목하자🧐
Node.js나 JavaScript에서는 모듈을 export 해야한다.
하지만 Go의 경우, function을 export 하고 싶다면 function을 대문자로 시작하면 된다!
이렇게 함수를 대문자로 시작하면 something.SayHello()와 같이 function을 export해서 사용할 수 있다.
반면, something.sayBye()는 대문자로 시작하지 않기 때문에 private이 되어 사용할 수 없다.
따라서 Println이 대문자로 시작하는 이유도 해당 함수를 export 하기 위한 것임을 알 수 있다.