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 напрямую? Нужно всегда явно приводить типы? А что насчёт сравнения структур или указателей? Есть ли случаи, когда == ведёт себя как нестрогое сравнение?

Подскажите, пожалуйста, как правильно сравнивать значения в Go и почему разработчики языка отказались от строгого/нестрогого разделения. Спасибо!