Avatar ·

الفرق بين == و === في Go

مرحبًا بالجميع! أنا أتعلم Go بعد JavaScript وواجهت سوء فهم حول عوامل المقارنة. في JS هناك مقارنة صارمة (===) وغير صارمة (==)، بينما في Go أرى فقط ==. هل فهمي صحيح أنه لا يوجد عامل === في Go؟ وإذا لم يكن موجودًا، فكيف تعمل المقارنة للأنواع المختلفة؟

حاولت كتابة هذا الكود:

package main

import "fmt"

func main() {
    var a int = 5
    var b float64 = 5.0
    fmt.Println(a == b) // خطأ في الترجمة: mismatched types int and float64
}

توقعت أن Go إما سيحول الأنواع (مثل المقارنة غير الصارمة في JS) أو سيعطي خطأ. حصلت على خطأ في الترجمة. يعني أنه في Go لا يمكن مقارنة int و float64 مباشرة؟ هل يجب دائمًا تحويل الأنواع بشكل صريح؟ وماذا عن مقارنة الهياكل (structs) أو المؤشرات (pointers)؟ هل هناك حالات يتصرف فيها == كمقارنة غير صارمة؟

أرجو توضيح كيفية مقارنة القيم في Go بشكل صحيح.