Go를 컴파일하기 위해서는 꼭 main.go 파일을 생성해야 한다.
컴파일러는 main.go 파일을 찾아서 컴파일하게 된다.
직접 실행해 볼 필요가 없는 경우, 즉, 컴파일 하지 않아도 될 경우에는 main.go를 생성하지 않아도 된다.
package main
파일을 생성하고 나면 가장 위에 package를 적어주게 된다.
Go에서는 어떤 패키지를 사용하는지 작성해줘야 한다.
패키지는 Go에서 코드를 묶는 기본 단위로, 모든 코드는 꼭 패키지로 묶어야 한다.
import "fmt"
어떠한 패키지를 사용하고자 할 때 import로 선언하여 가져올 수 있다.
{패키지명}.{사용하려는 변수 or 함수} 이런 방식으로 하면 된다.
fmt.Println()
fmt 패키지는 formatting을 위한 패키지로 "fmt"를 import해서 사용하면 된다.
Javascript의 경우에 내가 export 하고자 하는 모듈들을 모두 'export ~~~' 이렇게 명시해주어야 한다.
Go에서는 내가 함수를 export하고자 한다면 함수이름을 대문자로만 시작해주면 다른 패키지에서 사용할 수 있다.
즉, 함수 이름이 소문자로 시작하면 같은 패키지에서만 사용할 수 있고, 대문자로 시작하면 다른 패키지에서 import하여 함수를 사용할 수 있다.
package something
import "fmt"
func sayBye() {
fmt.Println("Bye")
}
func SayHello() {
fmt.Println("Hello")
}
something 패키지가 다음과 같을 때, 'something.SayHello()'를 사용하는 것은 가능하지만 'something.sayBye()'를 사용하는 것은 불가능하다.
func main() {
fmt.Println("Hello World!!")
}
다른 언어들과 마찬가지로 특정 기능을 위한 코드들을 묶어놓은 코드 블록 단위이다.
Go는 Node.js나 Python과는 다르게 main 함수를 필요로 한다(컴파일이 목적일 때). 이 부분은 C와 비슷하다고 생각하면 좋을 것 같다.
컴파일러는 가장 먼저 main 패키지에서 main 함수를 찾아 실행시킨다.
main 패키지가 아니라면 main 함수를 사용할 수 없다.
Go에서는 함수를 호출할 때 호출하는 함수보다 호출되는 함수가 미리 선언되어야 할 필요는 없다.
package main
import "fmt"
func hello() {
fmt.Println("Hello")
}
func main() {
hello()
world()
}
func world() {
fmt.Println("world!")
}
위와 같이 world 함수가 main 함수보다 밑에 있어도 문제가 없다.
func hello()
{
fmt.Println("Hello")
}
그러나 이렇게 {}의 위치를 지키지 않으면 에러가 발생한다.