Go언어는 공부하면 할수록 편리한 것 같지만 낯선 내용들이 많습니다. Go언어의 변수 선언과 기본적인 문법에 대하여 어떠한 특징이 있는지 알아보도록 하겠습니다.
목차
변수 선언 방법
문법의 특징
변수 선언 방법
Go언어는 변수 선언 방법도 다양하다고 생각됩니다. 제가 배운 방법만 하여도 4 가지가 됩니다.
package main
import "fmt"
func main() {
var a int = 10;
var b int
var c = 5
d := 20
fmt.Println(a, b, c, d)
// 결과 : 10 0 5 20
}
1. var a int = 10
variable의 약자인 var를 이용하여 변수를 선언하겠다는 것을 알리고 변수명을 작성 후 타입을 지정합니다. java와 javascript와 달리 타입을 뒤에 작성합니다.
2. var b int
변수만 지정하고 값을 선언하지 않습니다. 이러한 경우 초가 값은 0입니다. (bool의 경우 false, float의 경우 0.0)
3. var c = 10
타입을 따로 지정하지 않는다면 우측 값을 참고하여 type이 정해집니다.
4. d := 10
Go의 장점이라고 볼 수 있는 코드의 간소화 특징이 가장 잘 나타나있는 선언 방법이라고 생각됩니다. 'var c = 10'처럼 d라는 변수에 ':='의 우측 값을 참고하여 타입을 지정하고 값을 선언합니다. 단 함수 내에서만 가능한 방법으로 전역변수에서 사용할 수 없습니다.
문법의 특징
Go는 문법 요소는 줄이고 유연함을 높여 적은 문법으로 풍부한 기능을 구현할 수 있다는 것이 특징입니다. 몇 가지 특징을 소개드리겠습니다.
세미콜론
세미콜론(;)으로 문장의 끝을 표시하는 다른 프로그래밍 언어처럼 Go 언어도 세미콜론을 사용합니다. 하지만 컴파일러가 컴파일할 때 각 문장의 끝에 세미콜론을 넣어주므로 실제 코드를 작성할 때는 꼭 필요한 경우가 아니면 넣지 않아도 작동한다는 특징이 있습니다.
반복문
반복문은 while 문 없이 for 문으로만 반복을 표현하고 소괄호도 생략할 수 있습니다.
for i:=0 ; i<=5 ; i++ {
fmt.Println(i)
}
for문의 예시입니다.
소괄호가 생략된 것을 볼 수 있으며 i를 선언할 때도 자료형 없이 :=를 이용하여 선언하였습니다. 변수 선언에 대하여는 아래 변수 목차에서 설명하겠습니다.
소괄호를 제거하는 대신 중괄호를 작성하여야 하며 여는 괄호는 반복문이나 제어문 함수가 시작되는 줄의 끝에 작성해주어야 합니다. 함수가 시작되는 줄 끝에 작성하지 않는다면 컴파일할 때 세미콜론을 삽입하므로 오류가 발생합니다.
If 문
if문도 반복문처럼 조건식을 작성할 때 소괄호를 생략할 수 있습니다. 대신 중괄호를 작성하고 여는 괄호의 경우 조건문이 시작되는 줄의 끝에 작성해야 합니다.
else의 경우도 if문의 닫는 중괄호 뒤에 이어서 else를 작성하여야 합니다. 줄을 바꿔서 작성하게 된다면 컴파일 시 세미콜론이 붙게 되어 오류가 납니다.
package main
import "fmt"
func main(){
i:=7
if i < 10 && i > 5 {
fmt.Println("i는 10보다 작고 5보다 크다.")
} else if i > 10 {
fmt.Println("i는 10보다 크다.")
} else {
fmt.Println("i는 10입니다.")
}
}
초기화 구문이라는 것을 사용할 수 있는데 if 문 내에서만 사용할 변수를 선언할 때 주로 사용합니다. 초기화 구문과 조건식은 세미콜론으로 구분합니다.
package main
import "fmt"
func sum(a, b int) int {
return a+b
}
func main(){
if i := sum(5, 2);i < 10 && i > 5 {
fmt.Println("i는 10보다 작고 5보다 크다.")
} else if i > 10 {
fmt.Println("i는 10보다 크다.")
} else {
fmt.Println("i는 10입니다.")
}
}
sum이라는 함수를 만들고 main함수에서 if문의 i를 선언할 때 사용합니다. 세미콜론을 이용하여 초기화 구문과 조건식을 구분하였습니다.
switch 문
지금까지 go 언어를 공부하며 가장 특이하다고 생각한 것은 switch입니다.
go에서는 case를 만나면 기본적으로 break가 되어 break를 작성하지 않습니다. 대신 다음 case로 넘어가야 하는 경우 fallthrough를 사용하여 넘어갑니다.
case에서 fallthrough를 사용하였다면 다음 case의 조건이 거짓이어도 다음 case의 내용을 실행합니다.
case의 조건을 작성하는 방법도 소괄호를 생략합니다.
package main
import "fmt"
func main(){
i:=7
switch i{
case 6, 7 :
fmt.Println("i는 6 또는 7입니다.")
case 8:
fallthrough
case 9:
fmt.Println("i는 8 또는 9입니다.")
}
}
case에 변수가 들어가는 경우 한 가지 값이 아닌 여러 값을 넣을 수 있습니다. 다른 언어에서 사용해 본 적 없는 방식이라 낯선 방법이지만 특정한 상황에서는 편리한 기능이라고 생각됩니다.
'case 8'의 경우 fallthrough를 사용하여 'case 6, 7'처럼 i가 8인 경우와 9인 경우 모두 'case 9'의 Println을 실행합니다.
switch문에 변수를 사용하지 않는 방식도 있습니다. 이러한 방식은 if문에 else를 많이 사용하여야 하는 경우 switch문으로 대체하여 가독성을 높이기도 합니다.
package main
import "fmt"
func main(){
i:=7
switch {
case i <10:
fmt.Println("i는 10보다 작다.")
case i > 10:
fmt.Println("i는 10보다 크다.")
default:
fmt.Println("i는 10입니다.")
}
}
익숙하지 않아 코드가 장점이 확 느껴지지는 않지만 go에서는 switch문이 break가 없기에 if문을 대신하여 가독성을 높이는 것이 좋을 것 같습니다.
위의 방식도 switch문이기에 fallthrough를 사용하면 다음 case의 내용도 함께 실행됩니다.
'Go language' 카테고리의 다른 글
[Go] 상수 선언과 특징 (iota, 비트 플래그) (0) | 2023.08.22 |
---|---|
[Go] fmt 패키지를 이용한 표준 입출력 (대입 연산자 활용) (0) | 2023.08.22 |
[Go] Go 기본 구조 설명 (build 설정) (0) | 2023.08.20 |
[Go] Go 개발 환경 준비 (gopls 오류) (0) | 2023.08.17 |
[Go] Go language란? (0) | 2023.08.16 |