조건문 정도는 내용 정리를 생략하려고 했지만, Go언어의 조건문은 다른 언어들에 비해 제약사항이 많은 편이기 때문에 한 번 정리하는 것도 괜찮을 것 같다는 생각이 들었다.
Go 언어의 조건문은 불친절한 구문이다. Go언어의 목표 중 "읽기 쉬운 코드"를 실현하기 위해서 라고 생각한다.
Go언어의 if
o 기본적인 특징
package main
import "fmt"
func main() {
num := 10
if num == 10 {
fmt.Println("num 은 10 이군요!")
}
}
위 코드는 가장 기본적인 Go언어의 조건문 형식이다. 다른 언어와 다른점은 if문의 조건으로 Boolean형이 사용되어야 한다는 것이다. 예를 들면 아래와 같은 코드는 오류가 발생한다.
func main() {
num := 10
if num {
fmt.Println("num 은 10 이군요!")
}
}
파이썬이나 C언어에서 유용하게 사용했던 문법인데, Go언어에서는 불가능하다는게 조금 아쉽다.
C언어를 자주 썼다면 코드의 길이를 줄이기위해 다음과 같은 코드를 많이 사용했을 것이다.
if(a==1)
b = 2
C언어에서 조건문은 중괄호를 생략한다면, 조건문을 선언한 바로 아랫 줄만 조건문으로 적용된다.
하지만 Go언어는 이러한 다양한 문법형식을 하나로 통일시키기 위해 조건을 만들었다.
함수나 조건문과 같이 지역(?)이 선언될때는 선언한 줄에 반드시 중괄호의 시작 부분(블록 시작 브레이스)을 입력해야 한다는 규칙이다. 예를 들면 아래와 같은 코드는 오류가 발생한다.
func main() {
num := 10
if num == 10
{
fmt.Println("num 은 10 이군요!")
}
}
o 다른 언어와 비교되는 특징
package main
import "fmt"
func main() {
num := 10
if val := num * 2; val == 20 {
fmt.Println("val 은 20 이군요!")
}
}
Go언어는 조건문을 선언하면서 간단한 문장을 같이 실행할 수 있다. 위 코드에서 조건문 선언과 함께 지역변수 val을 선언하고 바로 조건으로 val의 값이 20인지 확인하고있다.
위 표현은 조건문뿐만 아니라 switch, for문 등에서도 적용된다.
Go언어의 switch
Go언어의 분기문은 C언어와 매우 유사했기 때문에 큰 어려움 없이 공부를 할 수 있었다.
package main
import "fmt"
func main() {
num := 10
switch val := num * 2; val {
case 20:
fmt.Println("val은 20 이군요!")
default:
fmt.Println("val은 20 이 아니군요!")
}
}
위에서 공부했던 새로운 문법을 적용시킨 switch문이다.
C언어와 다르다기보단 C언어에 비해 더 추가된 기능이 Go언어의 switch문에 적용된다.
package main
import "fmt"
func main() {
//1. switch 문에서 문자열도 다룰 수 있다.
str := "apple"
switch str {
case "apple":
fmt.Println("str은 apple 이군요!")
default:
fmt.Println("str은 apple 이 아니군요!")
}
//2. switch 문에서 case에 표현식을 사용할 수 있다.
switch {
case str == "apple":
fmt.Println("str은 apple 이군요!")
default:
fmt.Println("str은 apple 이 아니군요!")
}
}
switch문에서 문자열을 다루고, case에 표현식을 사용할 수 있게 되었다.
마무리
Go언어를 틈틈이 공부하면서 복습할 겸 내용을 정리하는 중인데, 공부할수록 가시성도 좋고 편리한 언어라는 게 느껴진다.
나도 영향력 있는 개발자가 되기 위해 매일 공부할 것이다.
*구름 edu의 바로 실행해보면서 배우는 Go Lang"을 수강 후 정리한 내용입니다.
소스코드는 깃허브 저장소를 참고!
'Computer_Language > GO' 카테고리의 다른 글
[Go] 8. Go(golang)의 맵(map) (1) | 2019.10.07 |
---|---|
[Go] 7. Go(golang)의 배열과 슬라이스 (0) | 2019.10.01 |
[Go] 5. Go(golang)의 반복문 (0) | 2019.09.23 |
[Go] 4. Go(golang)의 자료형과 변수 선언 (0) | 2019.09.11 |
[Go] 3. Go(Golang)의 입력 함수 (scan) (0) | 2019.08.31 |