문제

나는 항상 "Goto"인 끔찍한 것을 읽습니다. 그러나 오늘날 Google 프로그래밍 언어에 대해 읽습니다 가다, 나는 그것이 코 루틴 (Goroutines)을 부수한다는 것을 본다.

질문은 ~이야:

Coroutine == GoTo 

또는

Coroutine != GoTo?

왜요?

도움이 되었습니까?

해결책

Goroutines는 GOTO와 같지 않습니다. 기본 코드와 병렬로 실행됩니다. 당신이 같은 것을 언급 할 때 (그들의 예에서 http://golang.org/doc/effective_go.html)

go list.Sort();  // run list.Sort in parallel; don't wait for it. 

메인 라인 코드는 계속됩니다. 종류가 완료되기를 기다리지 않습니다. 정렬 루틴은 자체 가벼운 실행 스레드에서 시작되며 스레드가 종료되는 정렬을 완료 할 때 시작됩니다.

GOTO는 메인 라인 코드가 별도의 실행 경로로 분기되게합니다. goto 결코 달리지 않을 것입니다.

다른 팁

주요 차이점은 goto 언어를 지원하는 언어의 진술은 제한이 거의 없거나 전혀없는 프로그램의 모든 위치로 점프 할 수 있습니다. 표면에있는 코 루틴은 비슷해 보일 수 있지만 매우 다릅니다.

코 루틴은 절차를 일시 중단하고 (모든 상황에 따라) 재개 할 수 있습니다. 확실한 위치. 따라서 코 루틴은 일시 중지됩니다 yield 다른 절차를 완료 한 다음 나중에 재개하기 전에 다른 절차를 제어하십시오. 절차가 양보하고 이력서를 얻는 지점은 미리 알려져 있습니다.

절차에서 단순히 임의의 선으로 점프 할 수는 없으며, 문제의 절차는 특정 위치에서 재개되기를 기다려야합니다. 이러한 통제권 통과는 goto 이 강력한 메커니즘을 과도하게 사용하여 혼란스러운 코드를 작성할 수 있습니다. 그렇다면 다시 강력한 프로그래밍 언어 기능이있는 경우가 아닙니다. ;-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top