الفواصل المنقوطة
مثل C، تستخدم القواعد الرسمية لـ Go الفواصل المنقوطة لإنهاء الجمل، لكن بخلاف C، لا تظهر هذه الفواصل في المصدر. بدلًا من ذلك، يستعمل المُحلِّل (lexer) قاعدة بسيطة لإدراج الفواصل المنقوطة تلقائيًا أثناء المسح، فيخلو نصّ الإدخال منهما في معظمه.
والقاعدة هي هذه: إذا كان آخر رمز قبل سطر جديد هو مُعرِّفًا (identifier) — الذي يشمل كلمات مثل int وfloat64 — أو قيمة أساسية (basic literal) مثل عدد أو ثابت نصي، أو أحد الرموز
break continue fallthrough return ++ -- ) }
فإن المُحلِّل يُدرِج فاصلة منقوطة دائمًا بعد ذلك الرمز. ويمكن اختصار القاعدة في: «إذا جاء سطرٌ جديد بعد رمز قادر على إنهاء جملة، فأدرج فاصلة منقوطة».
ويمكن كذلك حذف الفاصلة المنقوطة مباشرةً قبل قوس إغلاق، فجملة مثل
go func() { for { dst <- <-src } }()
لا تحتاج إلى فواصل منقوطة.
والبرامج المتّبعة لأعراف Go لا توجد فيها الفواصل المنقوطة إلا في مواضع مثل بنود حلقة for، حيث تفصل بين عنصر التهيئة وعنصر الشرط وعنصر المتابعة. وهي ضرورية أيضًا لفصل جمل متعددة في السطر الواحد، إن كتبت شيفرة على هذا النحو.
وإحدى نتائج قواعد إدراج الفواصل المنقوطة أنك لا تستطيع وضع قوس الافتتاح لبنية تحكم — if أو for أو switch أو select — في السطر التالي. ففعل ذلك سيُدرِج فاصلة منقوطة قبل القوس، وقد ينتج عن ذلك آثار غير مقصودة. فاكتبها هكذا:
if i < f() {
g()
}
وليس هكذا:
if i < f() // خطأ!
{ // خطأ!
g()
}