Domanda

ho sempre letto circa la cosa orribile che "goto" è. Ma oggi, leggendo il rel="nofollow di programmazione di Google lingua Vai , vedo che suports coroutine (Goroutines).

La domanda è:

Coroutine == GoTo 

o

Coroutine != GoTo?

Perché?

È stato utile?

Soluzione

Goroutines non sono la stessa di un goto - corrono in parallelo con il codice principale. Quando si affermi una cosa del genere (dal loro esempio a http://golang.org/doc/effective_go.html)

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

il codice mainline continua - non aspetta per l'ordinamento per terminare. La routine di ordinamento avvia nel proprio thread leggera di esecuzione e quando finisce il tipo che esce filetto.

Un goto causerebbe il codice di linea principale al ramo ad un percorso di esecuzione separato -. Così le dichiarazioni del dopo goto sarebbe mai run

Altri suggerimenti

La differenza chiave è che le dichiarazioni goto nelle lingue che sostengono li permettono di saltare in qualsiasi posizione nel programma con poca o nessuna restrizione. Mentre coroutine maggio sulla superficie sembrano simili sono molto diversi.

coroutine consentano procedure sospesi (con tutto il loro contesto) e ripresa alle alcuni località. Così, mentre coroutine fare Mettere in pausa e controllo yield ad altre procedure prima di completare e poi riprendere in seguito, i punti in cui le procedure di resa e riprendere da è conosciuto prima del tempo.

Non è possibile saltare semplicemente una linea arbitraria in una procedura, il procedimento in questione deve in attesa di essere ripreso in una posizione specifica. Mentre questo passaggio di controllo è molto più strutturato che con goto è possibile scrivere codice confuso da un uso eccessivo di questo potente meccanismo. Poi ancora una volta che è che non è il caso di ogni potente funzione di linguaggio di programmazione? ; -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top