سؤال

قرأت دائما عن الشيء الرهيب الذي "انتقل" هو. ولكن اليوم، والقراءة عن لغة برمجة Google اذهب, ، أرى أنه يفرز coroutines (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 تصريحات بلغات تدعمها تسمح بالقفز إلى أي موقع في البرنامج مع قيود ضئيلة أو معدومة. في حين أن Coroutines قد يبدو على السطح مشابها لأنها مختلفة جدا.

Coloutines تسمح بإعداد الإجراءات (مع كل سياقها) واستئناف المؤكد المواقع. لذلك في حين أن الجمود تفعل وقفة و yield السيطرة على الإجراءات الأخرى قبل إكمالها ثم استئنافها لاحقا، فإن النقاط التي تستغرقها الإجراءات واستئنافها من قبل الوقت.

لا يمكن ببساطة الانتقال إلى خط تعسفي في إجراء، يجب أن ينتظر الإجراء المعني أن ينتظر استئنافه في موقع معين. في حين أن هذا تمرير السيطرة هو أكثر تنظيما أكثر من goto من الممكن كتابة رمز مربك من خلال إفراط في استخدام هذه الآلية القوية. ثم مرة أخرى وهذا ليس هو الحال مع كل ميزة لغة البرمجة القوية؟ ؛-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top