TIL: 작동하는 무한 for 루프와 중단되는 루프 간의 현명한 차이점

1980 단어 tricksgotodayilearned
무한 for 루프가 있는 다음 Go 함수를 고려하십시오.

func exampleA() int {
    for {
        /* do something */
        return 1
    }
}


이 질문에 대해 잠시 생각해 보십시오. 이 코드는 컴파일 시간에 중단됩니까?

"예, 함수가 닫히기 전에 반환값이 누락되었습니다. 반환 전에 중단이 도입된 다음 코드를 예로 들어 보겠습니다. 이 함수는 어떻게 작동할까요?"; 귀하의 진술과 예가 정확하고 exampleB 실제로 컴파일러에서 누락된 반환 메시지를 받을 것이라는 데 동의합니다.

func exampleB() int {
    for {
        break
        return 1
    }
}


그러나 함수exampleA를 변경하지 않고 마지막에 반환값을 누락하지 않고 어딘가에서 테스트하면(예를 들어 Go's Playground에서) 불평 없이 컴파일되고 실행된다는 사실을 발견하면 매우 놀랄 것입니다.

그게 어떻게 가능해?

내부에 break가 없는 무한for 문은 컴파일러에서 종료 문으로 간주됩니다. 이 문은 문 목록 끝에 있으며 동일한 블록 내에서 추가 문 실행을 차단하는 문입니다.

이는 return 문이 없음에도 불구하고 다음 예제도 작동함을 의미합니다.

func exampleC() int {
    for {}
}


중단 없는 무한 루프for가 Go에 있는 유일한 종료 명령문은 아닙니다. 자세한 내용은 golang 참조 사양this section을 참조하세요.

도움이 되었기를 바랍니다. 시간 내서 읽어주셔서 감사합니다!

좋은 웹페이지 즐겨찾기