علل ومشكلات

بعض أخطاء ترتيب تهيئة المتغيرات على مستوى الحزمة المعروفة في إصدارات معيّنة من سلسلة أدوات Go

الحالة 1

بسبب خطأ في تضمين الدوال (استدعاء الدالة foo() مُضمَّن هنا)، مع إصدارات سلسلة أدوات Go السابقة لـ v1.23، يطبع البرنامج التالي 1 0، لكن ينبغي أن يطبع 1 1 وفق القواعد المحددة في مواصفة Go.

تم إصلاح الخطأ منذ سلسلة أدوات Go v1.23.


package main

var x = 0
var a = foo()
var b = x

func foo() int {
	x++
	return x
}

func main() {
	println(a, b)
}

الحالة 2

بسبب خطأ في تحسين المصرِّف، مع إصدارات سلسلة أدوات Go السابقة لـ v1.22، يطبع البرنامج التالي true، لكن ينبغي أن يطبع false وفق القواعد المحددة في مواصفة Go.

تم إصلاح الخطأ منذ سلسلة أدوات Go v1.22.


package main

var _ = func() int {
	a = false
	return 0
}()

var a = true
var b = a

func main() {
	println(b)
}

الحالة 3

بسبب خطأ في المصرِّف، مع إصدارات سلسلة أدوات Go السابقة لـ v1.12، يطبع البرنامج التالي 5 4، لكن ينبغي أن يطبع 4 5 وفق القواعد المحددة في مواصفة Go.

تم إصلاح الخطأ منذ سلسلة أدوات Go v1.13.


package main

var (
  a = c
  b = f()
  c = f()
  d = 3
)

func f() int {
  d++
  return d
}

func main() {
	println(b, c)
}