ufm: (Default)
[personal profile] ufm

Вобще язык поражает своей… Не знаю как это назвать. Неконсистенстностью?

Можно определить в модуле неэкспортируемый тип? Можно. И пользоваться этим типом снаружи не получится.

Но зато из этого модуля можно вернуть значение этого типа. Его можно присвоить переменной. И даже пользоватся этой переменной (методы там вызывать).

Но передать эту пременную в свою функцию — нельзя. Потому что нельзя описать параметр (тип-то не экспортируемый). А если параметр описать как 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.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting