`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 문은 코드를 읽고 유지 관리하기 어렵게 만들 수 있으므로, 구조화된 제어 흐름을 위해 일반적으로 권장되지 않습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움이 챌린지에서는 goto 문을 사용하여 간단한 재시도 메커니즘을 만드는 연습을 합니다. 여러분은 연결을 시도하고 실패할 경우 특정 횟수만큼 재시도하는 연결 시스템을 구축하고 있습니다.
두 개의 입력을 받게 됩니다:
- 최대 재시도 횟수를 나타내는 문자열 (예:
"3") - 성공하게 될 시도 번호를 나타내는 문자열 (예:
"2")
여러분의 작업은 다음과 같습니다:
- 첫 번째 입력에서 최대 재시도 횟수를 파싱합니다.
- 두 번째 입력에서 성공 시도 번호를 파싱합니다.
- 레이블과 함께
goto문을 사용하여 재시도 로직을 구현합니다. - 시도 번호 1부터 시작하여 각 실패한 시도 후에 번호를 증가시킵니다.
- 실패하는 각 시도에 대해,
"Attempt [attempt_number] failed"를 출력합니다. - 시도 번호가 성공 시도 번호와 일치하면,
"Attempt [attempt_number] succeeded"를 출력하고 종료합니다. - 성공하지 못하고 최대 재시도 횟수를 초과하면,
"All attempts failed"를 출력하고 종료합니다.
시도가 실패하고 최대 시도 횟수를 초과하지 않았을 때 재시도 레이블로 다시 점프하기 위해 goto 문을 사용하세요. 시도 번호는 1부터 시작해야 합니다.
치트 시트
goto 문은 동일한 함수 내에서 제어권을 레이블이 지정된 문으로 직접 전달합니다. 식별자 뒤에 콜론을 붙여 레이블을 정의한 다음, goto를 사용하여 해당 위치로 점프합니다:
func main() {
i := 0
start:
fmt.Println("Count:", i)
i++
if i < 3 {
goto start
}
fmt.Println("Done!")
}Go에서 goto를 사용할 수 있지만, 루프나 if 문과 같은 구조화된 제어 흐름이 더 명확하고 유지보수가 쉽기 때문에 현대적인 Go 프로그래밍에서는 거의 사용되지 않습니다.
직접 해보기
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 문을 사용하여 재시도 로직을 구현하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.