16.3. 프로그램언어 고(Go)의 조건문 활용 방법

프로그램언어 고(Go)에서의 “if” 조건문 활용 방법

고(Go)언어에서의 “if”조건문은 다음과 같이 사용할 수 있습니다.


package main

import "fmt"

func main() {

    // if 조건문 예제
    if 7%2 == 0 {
       fmt.Println("7은 짝수입니다") 
    } else {
       fmt.Println("7은 홀수입니다")
    }

}

위 예제코드에서 보시다시피, if 조건문은 “if”키워드로 시작합니다.
그 뒤 괄호 안에 조건을 작성합니다.
조건이 참(true)일 경우 중괄호 안의 문장들이 실행되고, 거짓(false)일 경우 else 블록이 실행됩니다.

if문에 else if, else 블록을 추가할 수도 있습니다.


if 조건1 {
   /* 조건1이 참일 경우 실행 */ 
} else if 조건2 {
   /* 조건1은 거짓이고 조건2가 참일 경우 실행 */   
} else {
   /* 조건1과 조건2가 모두 거짓일 경우 실행 */
}

이렇게 else if를 이용하여 여러 조건을 추가할 수 있습니다.

if 조건문을 사용할 때 주의할 점은 다음과 같습니다.

1. 조건에는 bool 타입이 와야합니다.
2. 중괄호는 반드시 사용해야하며, 한 줄 짜리 문장이어도 중괄호를 사용합니다.
3. 코드의 가독성을 위해 들여쓰기를 잘 해야합니다.
4. else 블록을 사용할 때 중괄호를 빼먹지 마세요.

if문은 프로그램의 흐름을 제어하는 가장 기본적인 방법 중 하나이므로 잘 사용할 줄 알아야 합니다.

위 예제를 통해 고(Go)언어의 if 조건문 사용법을 익혔기를 바랍니다.

프로그램언어 고(Go)에서의 “else” 조건문 활용 방법

고(Go) programming 언어에서의 “else” 조건문은 if 문 다음에 사용되어 if 조건문이 거짓일 경우 실행될 코드 블록을 정의합니다.

if 조건문 구문은 다음과 같습니다.

if 조건 {
  // 조건이 참일 경우 실행 
} else {
  // 조건이 거짓일 경우 실행
}

if 조건문 뒤에 else 문을 사용하면 코드가 더 간결해지고 가독성이 높아집니다.

예를 들어 다음과 같은 코드가 있다고 합시다.

score := 60

if score >= 90 {
  fmt.Println("A") 
} 

if score < 90 && score >= 80 {
  fmt.Println("B")
}

if score < 80 && score >= 70 {
  fmt.Println("C")  
}

위 코드는 score 값에 따라 성적을 출력하는 코드입니다.

이를 else 문을 사용하면 다음과 같이 표현할 수 있습니다.

score := 60

if score >= 90 {
  fmt.Println("A") 
} else if score >= 80 { 
  fmt.Println("B")
} else if score >= 70 {
  fmt.Println("C")
} else {
  fmt.Println("F") 
}

else if와 else를 사용하여 코드가 보다 간결해졌고, 가독성도 높아졌습니다.

또한 90점 미만인 경우를 처리할 else 문을 추가하였습니다.

이처럼 Go programming 에서의 else 문은 if 조건문과 함께 사용되어 코드의 흐름을 보다 유연하고 명확하게 제어할 수 있습니다.

else 문 사용에 대한 더 자세한 사항은 Go documentation을 참고해주시기 바랍니다.

Go 코딩 숙련도 향상을 기원합니다.

프로그램언어 고(Go)에서의 “else if” 조건문 활용 방법

고(Go)언어에서의 “else if” 조건문은 if문 다음에 else if문을 추가하여 복수의 조건을 판단할 수 있게 해주는 구문입니다.

if 조건1 {
// 조건1이 true일 때 실행
} else if 조건2 {
// 조건1은 false고 조건2가 true일 때 실행
} else if 조건3 {
// 조건1, 조건2가 false고 조건3이 true일 때 실행
} else {
// 모든 조건이 false일 때 실행
}

이러한 else if문은 자바나 C와 같은 다른 언어의 else if문과 동일한 구조를 가지고 있습니다.

if문 다음에 하나 이상의 else if문을 실행할 수 있고, 마지막에 else문을 추가하여 위의 조건들이 모두 false일 경우 실행할 문을 지정할 수 있습니다.

else if문을 사용하면 복수의 조건 확인 시 간결하고 가독성 좋은 코드를 작성할 수 있습니다.

다음은 else if문을 사용한 예제 코드입니다.


package main

import "fmt"

func checkNumber(num int) {

  if num > 0 {
    // num이 0보다 클 때 실행
    fmt.Println("양수입니다") 
  } else if num < 0 {
    // num이 0보다 작을 때 실행
    fmt.Println("음수입니다")
  } else {
    // num이 0일 때 실행 
    fmt.Println("0입니다")
  }

}

func main() {

  checkNumber(10) // "양수입니다" 출력
  checkNumber(-5) // "음수입니다" 출력
  checkNumber(0) // "0입니다" 출력

}

위 예제에서는 전달받은 num 변수값을 확인하여 양수, 음수, 0에 따라 다른 문구를 출력하고 있습니다.

if문으로 num이 0보다 큰 경우를 확인하고, else if문으로 0보다 작은 경우를 확인합니다.

마지막으로 두 조건 모두 만족하지 않을 시 0일 경우를 else문으로 처리하고 있습니다.

이처럼 else if문을 통해 복수의 조건을 효과적으로 확인할 수 있습니다.

필요에 따라 else if문을 계속 추가하여 더 많은 조건을 확인할 수도 있습니다.

위 예제 코드에 대한 더 자세한 설명은 아래와 같습니다.

checkNumber 함수는 int형 변수 num을 전달받아서 값을 확인합니다.

if문에서는 이 num 변수가 0보다 큰지, 즉 양수인지 확인합니다.

num이 양수이면 "양수입니다"라는 문구를 출력하게 됩니다.

다음으로 else if문에서는 num이 0보다 작은지, 즉 음수인지 확인합니다.

num이 음수이면 "음수입니다"라는 문구를 출력합니다.

마지막으로 위 두 조건문이 모두 만족하지 않았다면, 즉 num이 0일 경우를 else문에서 처리합니다.

num이 0이면 "0입니다"라는 문구를 출력하게 됩니다.

main 함수에서는 checkNumber 함수를 세 번 호출하면서 다양한 값을 전달합니다.

10, -5, 0 순으로 함수를 호출하여 "양수입니다", "음수입니다", "0입니다"가 출력되는 것을 확인할 수 있습니다.

이를 통해 else if문이 코드의 가독성을 높이고, 복수의 조건문을 효과적으로 사용할 수 있음을 확인할 수 있습니다.

고맙습니다.

프로그램언어 고(Go)에서의 "switch" 조건문 활용 방법

Go언어에서 switch 문은 다음과 같이 사용할 수 있습니다.

package main

import "fmt"

func main() {

    finger := 3

    switch finger {
    case 1:
        fmt.Println("엄지")
    case 2:
        fmt.Println("검지") 
    case 3:
        fmt.Println("중지")
    case 4:
        fmt.Println("약지")
    case 5:
        fmt.Println("새끼")
    default:
        fmt.Println("Error")
    }

}

위 예제코드에서 보이는 것처럼 switch문은 finger 변수의 값에 따라 case절을 실행합니다.

finger의 값이 3이기 때문에 "중지"가 출력됩니다.

switch 문에는 기본적으로 break 문이 있는 것처럼 동작합니다. break 문이 없더라도 매치된 case 이후의 문장은 실행되지 않습니다.

default 문은 매치된 case가 없는 경우 실행됩니다.

package main

import "fmt"

func main() {

    switch {
    case false:
       fmt.Println("1이 아닌 경우")
    case true:
        fmt.Println("1인 경우") 
    }

}

위 예제처럼 switch문의 조건부분을 비워두면 모든 조건은 true로 간주되어 case문을 순차적으로 실행합니다.

따라서 위 예제의 결과값은 "1인 경우"가 출력됩니다.

switch문에 다음처럼 Type assertion을 활용할 수도 있습니다.

package main

import "fmt"

func do(i interface{}) {
   switch v := i.(type) {
     case int:
        fmt.Printf("Twice %v is %v\n", v, v*2)
     case string:
        fmt.Printf("%q is %v bytes long\n", v, len(v))
     default:
        fmt.Printf("I don't know about type %T!\n", v)
   }
}

func main() {
   do(21)
   do("hello")
   do(true)
}

이 예제에서 v := i.(type)으로 type assertion을 하고, 각 타입 별로 동작을 정의할 수 있습니다.

이 외에도 switch문은 다양한 방식으로 활용 가능합니다. break문을 사용하여 fallthrough 효과를 만들 수도 있고, Type switch문으로 타입 검사에도 도움을 받을 수 있습니다.

지금 설명드린 것 외에 궁금하신 점이 있으시면 언제든 문의 주세요. 최대한 자세히 도와드리겠습니다.

프로그램언어 고(Go)에서의 "select" 조건문 활용 방법

Go 언어의 select 문은 channel이나 interface를 통해 데이터를 주고받는 동안 다른 경우의 수를 처리할 수 있게 해주는 효율적인 문법입니다.

select 문은 case 문과 유사하지만, channel 통신이 이루어지는 동안 대기할 수 있다는 점이 다릅니다.


package main

import "fmt"

func main() {

  c1 := make(chan string)
  c2 := make(chan string)

  // goroutine을 실행하여 channel에 값을 보냄
  go func() {
    c1 <- "from 1"
  }()
  go func() {
    c2 <- "from 2"
  }()
    
  // channel에서 값을 받을 때까지 기다림  
  select {
  case msg1 := <-c1:
    fmt.Println(msg1)
  case msg2 := <-c2:
    fmt.Println(msg2)
  }
}

위 예제에서 select 문은 c1 또는 c2 channel에서 값이 수신될 때까지 기다립니다.

만약 c1에서 먼저 값이 도착하면 msg1에 할당되고 화면에 출력됩니다.

반대로 c2가 먼저 도착하면 msg2에 할당돼 출력됩니다.

이를 통해 병렬로 실행되는 고루틴들 사이에서 원활하게 통신할 수 있습니다.

select 문에는 case문 외에 default 문을 추가할 수도 있습니다.


select {
case msg1 := <-c1:
   // c1에서 값을 수신한 경우
default:
   // c1과 c2 모두에서 값을 받지 못한 경우
} 

위 처럼 default 문을 사용하면 어떤 채널에서도 값을 수신하지 못했을 때 실행할 문장을 지정할 수 있습니다.

이를 통해 타임아웃을 구현할 수도 있겠죠.

이 외에도 select 문은 채널操作에 추가 옵션을 지정할 수 있습니다.


select {
case msg1 := <-c1:
  // c1에서 값을 읽음
case c2 <- "hello":
  // c2에 "hello"를 보냄  
}

위 예에서 보듯이 send/receive 외에 단독으로 채널로 보내기/받기를 할 수도 있습니다.

다양한 조합으로 복잡한 채널 통신 로직을 구현할 수 있겠죠.

이 정도면 Go언어의 select 문 사용법에 대한 전반적인 이해는 충분하다고 생각합니다.

추가로 궁금한 점이 있으시다면 언제든 질문 보내주세요.

Leave a Comment