Вобще язык поражает своей… Не знаю как это назвать. Неконсистенстностью?
Можно определить в модуле неэкспортируемый тип? Можно. И пользоваться этим типом снаружи не получится.
Но зато из этого модуля можно вернуть значение этого типа. Его можно присвоить переменной. И даже пользоватся этой переменной (методы там вызывать).
Но передать эту пременную в свою функцию — нельзя. Потому что нельзя описать параметр (тип-то не экспортируемый). А если параметр описать как interface{} — то передать можно, но толком пользоваться — нельзя. У interface{} нет методов, например. Хотя, я подозреваю, через reflect можно дотянуться и до методов, но это уде совсем через жопу.
Можно в функцию передать переменное число параметров? Можно.
Можно из функции вернуть несколько значений? Можно.
Можно сделать вложенный вызов, так, что-бы возвращенные значения ушли напрямую в функцию с переменным числом параметров? Можно, но только если не будет дополнительных параметров.
Зачем было делать возможность возвращать несколько значений? А вот что-б не как Цэ, что-б функция могла вернуть значение и флаг успешности.
О! Наверное можно написать err, a, b, c, d: := fmt.Scanf(«%d %d %d %d») ? Неее. Нельзя. У функции может быть несколько возвращаемых значений, но не может быть переменное число возвращаемых значений.
Классы есть? Ну… Есть структуры с методами. Но конструкторов и деструкторов — нет. Так что если что, то ручками вызывай, не обломишься.
Лёгкие сопроцессы есть? Есть. Но методов контроля за ними — никаких.
А, вот еще прикол:
loop:
for {
break loop
}
Называется — догадайся куда мы выйдем после break.
Originally published at U.F.M's Homepage. You can comment here or there.