Menu
Coddy logo textTech

`goto` 문

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 4번째.

Go의 goto 문은 동일한 함수 내의 레이블이 지정된 문으로 제어를 직접 전달할 수 있게 해줍니다. Go에는 이 기능이 포함되어 있지만, 루프나 if 문과 같이 더 명확한 제어 구조가 선호되기 때문에 현대 Go 프로그래밍에서는 거의 사용되지 않습니다.

goto를 사용하려면, 먼저 식별자 뒤에 콜론을 붙여 레이블을 정의합니다. 그런 다음 goto 뒤에 레이블 이름을 붙여 해당 레이블로 이동할 수 있습니다.

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

이 예제에서 프로그램은 조건이 더 이상 충족되지 않을 때까지 start 레이블로 다시 점프합니다. 하지만 이와 동일한 로직은 for 루프를 사용하는 것이 훨씬 더 명확할 것입니다. goto 문은 코드를 읽고 유지 관리하기 어렵게 만들 수 있으므로, 구조화된 제어 흐름을 위해 일반적으로 권장되지 않습니다.

challenge icon

챌린지

쉬움

이 챌린지에서는 goto 문을 사용하여 간단한 재시도 메커니즘을 만드는 연습을 합니다. 여러분은 연결을 시도하고 실패할 경우 특정 횟수만큼 재시도하는 연결 시스템을 구축하고 있습니다.

두 개의 입력을 받게 됩니다:

  • 최대 재시도 횟수를 나타내는 문자열 (예: "3")
  • 성공하게 될 시도 번호를 나타내는 문자열 (예: "2")

여러분의 작업은 다음과 같습니다:

  1. 첫 번째 입력에서 최대 재시도 횟수를 파싱합니다.
  2. 두 번째 입력에서 성공 시도 번호를 파싱합니다.
  3. 레이블과 함께 goto 문을 사용하여 재시도 로직을 구현합니다.
  4. 시도 번호 1부터 시작하여 각 실패한 시도 후에 번호를 증가시킵니다.
  5. 실패하는 각 시도에 대해, "Attempt [attempt_number] failed"를 출력합니다.
  6. 시도 번호가 성공 시도 번호와 일치하면, "Attempt [attempt_number] succeeded"를 출력하고 종료합니다.
  7. 성공하지 못하고 최대 재시도 횟수를 초과하면, "All attempts failed"를 출력하고 종료합니다.

시도가 실패하고 최대 시도 횟수를 초과하지 않았을 때 재시도 레이블로 다시 점프하기 위해 goto 문을 사용하세요. 시도 번호는 1부터 시작해야 합니다.

직접 해보기

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 입력 읽기
    var maxRetriesStr string
    var successAttemptStr string
    fmt.Scanln(&maxRetriesStr)
    fmt.Scanln(&successAttemptStr)
    
    // 입력을 정수로 파싱
    maxRetries, _ := strconv.Atoi(maxRetriesStr)
    successAttempt, _ := strconv.Atoi(successAttemptStr)
    
    // 시도 횟수 카운터 초기화
    attempt := 1
    
    // TODO: 아래에 코드를 작성하세요
    // 레이블과 goto 문을 사용하여 재시도 로직을 구현하세요
    
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨