0. 들어가며
Go는 컴파일 언어이며 예약어가 많지 않고, 배포가 쉽다.
시중에 나온 책 중에 Go 언어로 구현하는 인터프리터, 컴파일러가 있는 것 같은데
Go를 조금 익히면 그 책을 사서 소스코드로 어떻게 AST가 구성되는지, 어떻게 운영체제와 CPU 아키텍처별로 코드가 변환되는 지를 배워보고 싶다.
Go언어는 시작하기 전에 main 함수라는 것을 알아야한다.
내가 직접 Go언어로 컴파일하여 프로그램을 시작하려면,
실행될 코드나 시작점을 main 함수에 넣어야한다.
그러니까 여기 아래에 있는 코드는 다 func main(){} 안에 있다고 생각하고 실습해보자.
시작하자.
1. 상수 선언
Go에서는 상수를 선언할 때 const라는 예약어를 사용한다.
또한 상수명 뒤에 타입을 직접 지정하여 넣을 수도 있다.
할당하려는 데이터 값과 데이터 타입이 다른 경우 에러가 난다.
const greeting string = "hello"
const greeting2 = "hello2"
2. 변수 선언
변수를 선언할 때는 var를 사용한다.
var name string = "Summer"
var name = "Summer2"
함수 내에서는 타입 지정을 Go에게 맡길 수 있다.
(함수 밖에서는 안됨)
name := "Summer"
Go 컴파일러는 해당 변수에 데이터를 정해준다.
이 경우 name은 var(변수)가 되며 const 상수가 아니다.
하지만, 타입은 축약형 문장이 실행되는 순간에 해당 변수의 자료형이 지정되기 때문에
다른 타입의 데이터를 재할당하려고 하면 오류가 발생한다.
함수 밖(전역)에서는 축약형(:=)을 사용할 수 없다.
직접 타입을 지정하거나(var name string = "value") 타입을 지정하지 않은 추론 형태(var name = "value")로 적어야 한다.
그럼 함수 내에서 이 두 가지의 경우는 어떻게 다를까?
var myName = "moneytech"
myName2 := "moneytech"
이렇게 2개는 똑같이 동작한다고 할 수 있다.
결국 Go 컴파일러가 자동으로 데이터형을 추론해서 넣어줄 것이기 때문이다.
3. 함수 선언
Go에서 함수는 func라는 키워드를 사용한다.
func multiply(number1 int, number2 int) int {
return number1 * number2
}
단, 함수의 매개변수 뒤에 자료형을 명시해주어야 한다.
그리고 괄호가 끝나고 return 하는 값의 자료형도 명시해준다. (이 경우에는 괄호가 끝나고 int)
매개변수 모두 타입이 같다면 한 번만 적어줄 수도 있다.
func multiply(number1, number2 int) int {
return number1 * number2
}
파라미터가 여러 개일 때는 어떨까?
예를 들어 함수에 숫자가 5개 넘어올지, 10개 넘어올지 모르는 상황이다.
이 경우에는 ... 이라는 키워드를 사용하면 된다.