Go언어의 IF 문, FOR 문
if문 - 조건이 맞으면 {} 블럭안 실행.( if는 특정 조건만 검사하는 경우에 적합함)
단, '{' 시작하는 블럭이 if 문과 같은 라인에 있어야 함.
c언어에서 사용하는 삼항 연산자(
? :
)를 사용할수 없슴(가독성을 위해서 지원하지 않음). 조건식 ()가 필요없슴.- if문에는 소괄호가 필요가 없슴.
Boolean 식으로만 표현 - 참(True) 또는 거짓(False)
Boolean식은 논리 연산(
&&
, ||
, !
)이나 비교 연산(==
, !=
, <
, >
, <=
, >=
)에서 사용함. Boolean식은 조건문
if
, for
, switch
에서 주로 사용함. 논리 판단: 특정 조건을 만족하는지 판단할 때 사용(크냐,작냐,같냐,다르냐,참이냐..)
if문에 조건식 이전에, if문 안에서만 사용할수 있는 문장을 추가할수도 있슴.
for i := 0; i < 10; i++ { // for문: 0~9까지의 숫자안에서 루프해라.
if i%2 == 0 { // if문: 짝수만 출력해라
fmt.Println(i) // 출력: 2, 4, 6, 8
}
}
for문: i가 0일때 부터, i가 10보다 작을때 까지, i를 +1 하며, 루프
숫자 0 부터, 9까지 루프로 체크 하고
if문: i를 2로 나눈 나머지값이 0과 같으려면, 짝수여야 하기에,
2,4,6,8 이 출력됩니다.
if true { // 참일때만 실행하는 if문
}
if false { // 거짓일때만 실행하는 if문
}
if a == 1 { // a 가 1과 같으면, 참이면
println("일")
} else if a == 2 { // 1은 아니고, 만일 2와 같다면
println("이") // fmt 없이, println 소문자로 사용은, go의 기본 내장함수라서
} else { // else - 1도 2도 아닌 기타면
fmt.Println("몰라") // fmt없는 경우는, 디버깅 및 간단한 출력테스트만 권장함.
} // fmt를 이용해서 출력시, Println함수에서 P는 대문자여야 함.
// fmt의 함수를 이용한 출력을 go언어는 권장합니다.
if ok1 := i * 3; ok1 < ok2 {
fmt.Println(ok1)
}
// if문에 조건식 이전에, if문 안에서만 사용할수 있는 문장을 추가할수도 있슴.
// 위의 예제에서 ok1 은, if문을 벗어난 경우 에러가 발생됩니다. if문 안에서만 사용함.
FOR 문- Go언어에서 for 로 루프를 사용합니다.
for문은 반복작업을 표현하는데 주로 사용합니다. 반복과 조건을 사용하려면, for문을 사용함.
- 반복을 실행하며, 반복하는 중간에 조건을 평가할수도 있슴.(조건 평가는 if 문을 사용)
for i := 0; i < 10; i++ { // for 초기값; 조건식; 후처리문(증감식) {} 블럭
}
for { // 무한루프
}
for x := 1; true; x++ { // 무한루프
}
for a < 50 { //조건식
}
for 루프의 range 문은 슬라이스(slice), 맵(map), 배열(array), 문자열(string), 채널(channel) 등의 데이터를 순회(iterate)할 때 사용됩니다.
for index, value := range collection {
// 반복할 코드
}
index: 현재 반복의 인덱스 (또는 키).
value: 현재 반복의 값.
collection: 순회하려는 데이터 구조.
슬라이스 순회
nums := []int{10, 20, 30, 40}
for index, value := range nums {
fmt.Printf("인덱스: %d, 값: %d\n", index, value)
}
결과: 인덱스: 0, 값: 10
인덱스: 1, 값: 20
인덱스: 2, 값: 30
인덱스: 3, 값: 40
맵순회
fruits := map[string]string{"a": "apple", "b": "banana", "c": "cherry"}
for key, value := range fruits {
fmt.Printf("키: %s, 값: %s\n", key, value)
}
결과: 키: a, 값: apple
키: b, 값: banana
키: c, 값: cherry
문자열 순회
str := "안녕"
for index, char := range str {
fmt.Printf("인덱스: %d, 문자: %c\n", index, char)
}
인덱스는 바이트 기준입니다. 한글처럼 UTF-8로 인코딩된 문자는 바이트 단위로 계산됩니다
결과: 인덱스: 0, 문자: 안
인덱스: 3, 문자: 녕
값만 사용하기 (_를 활용)
nums := []int{10, 20, 30, 40}
for _, value := range nums {
fmt.Println(value)
}
결과: 10
20
30
40
인덱스만 사용하기
값이 필요 없으면
_
를 사용해 생략할 수 있습니다. nums := []int{10, 20, 30, 40}
for index := range nums {
fmt.Println(index)
}
결과: 0
1
2
3
range는 슬라이스, 맵, 문자열, 배열 등을 순회할 때 사용합니다.
필요하지 않은 값이나 인덱스는 _를 사용해 생략할 수 있습니다.
range는 Go 코드에서 데이터를 반복 처리할 때 가장 직관적이고 간단한 방법입니다.
For 문을 if 문처럼 사용하는 경우
for condition { // if와 비슷하게 동작
fmt.Println("조건이 참입니다!")
break // 조건이 참이더라도 반복하지 않도록 종료
}
For 문으로 조건 처리 하는 방법
a, b, c := 5, 5, 1
for a == b && c == 1 { // 조건이 참일 때만 실행
fmt.Println("조건이 만족됩니다!")
break // 무한 루프를 방지하기 위해 추가
}
a, b, c := 5, 5, 1
for a == b && c <= 3 {
if c == 2 {
fmt.Println("조건 c == 2: 다음 반복으로 넘어갑니다.")
c++
continue // c == 2일 때 아래 코드 실행을 안하고, 다시 조건을 체크하로 감.
}
fmt.Printf("현재 c의 값: %d\n", c)
c++
}
fmt.Println("반복 종료")
continue와 break의 차이
continue: 현재 반복을 건너뛰고 다음 반복으로 이동.
continue 가 실행되면, 반복을 다시 시작 체크함.
continue 다음의 내용은 적용 안되고, 다시 반복을 체크하로 감.
break: 반복문을 완전히 종료.
break 가 실행되면, 그 조건문(if. for)을 빠져 나감.
a, b, c := 5, 5, 1
for a == b && c <= 5 {
if c == 3 {
fmt.Println("c == 3: 반복을 완전히 종료합니다.")
break // 반복문 종료- 조건문을 완전히 빠져 나감
}
if c == 2 {
fmt.Println("c == 2: 다음 반복으로 넘어갑니다.")
c++
continue // 다음 반복으로 건너뜀-아래 조건은 실행 안하고, 다시 조건 체크로 이동
}
fmt.Printf("현재 c의 값: %d\n", c)
c++
c++ 과 ++c 차이점
c++ = (후위 증가 연산자), 변수 c의 값을 먼저 사용하고, 그 다음에 1을 증가시킴
int c = 5;
int result = c++; // result에 5가 저장되고, c는 6이 됩니다.
먼저 사용한 다음에 증가를 합니다.
++c = (전위 증가 연산자), 변수 c의 값을 먼저 1 증가시키고, 그 증가된 값을 사용함.
int c = 5;
int result = ++c; // c는 6이 되고, result에 6이 저장됩니다.
먼저 증가를 시키고, 사용을 합니다.
c = c + 1
int c = 5;
c = c + 1; // c는 6이 됩니다.
값에 1을 더하고, 다시 할당합니다. 증가만 시킵니다.