Собственно, вопрос в заголовке. Очень много об этом говорят в контексте обсуждения новых ЯП. Я понимаю, что такое типобезопасность (type safety), но почему, например, у Rust «хорошая система типов», а у Go «плохая», хотя оба, формально, type safe?
Нет такого понятия. Есть субъективное мнение большинства что Rust реализовали систему типов очень красиво и элегантно. Так же существует распространенное мнение что Go - плохо спроектированный язык и вообще он уродлив, приводя довольно неплохие доводы, но иногда странные. Кто-то жалуется что в go нет дженериков, кто-то сетует на синтаксис.... словом... субъективизмы.
Человеки обычно отвергают то, что реализовано не так как они считают должно быть))
На JS с их прототипным ооп куча наездов, чаще всего с фразами в стиле "вот как там сделать protected что-нить?" - ответ "там это не нужно".
На счет типов у Go - они реально мощевые, да там нету общепринятого наследования типов, классов нету, но вместо этого есть на порядки более удобный механизм встраивания/агрегирования. Интерфейсы (с моей личной точки зрения) - вообще имеют лучшую реализацию, по сравнению с кучей других языков.
Конкретно по безопасности типов - в чем проблема то? Не нравится interface{} - используй жесткое указание типа, все будут счастливы.