Комментарии 9
Учитывая что в го есть нулевые значения, то можно использовать что то типа
Name: name ? “Unknown”
Следующий шаг
int x = switch (y) {
case 1: 7;
case 2: 38;
default: 11;
};Была такая мысль) более общий подход на фоне условного выражения
Но здесь с учётом конструкции type-switch уже потенциально выскакивает концепция sum-типов, которые я пока не стал реализовывать в Go. Хотя, конечно, можно принудить всегда писать default-ветку и худо-бедно дело закрыто
Следующее выражение откроет портал в ад?
content, err := if check() { os.ReadFile("filename") } else { nil, nil }
Да, такой код с пересобранным мной компилятором не скомпилируется. Несколько возвращаемых выражений как у функции недопустимы для условного выражения. Поругается на запятую в nil, nil, а если это заменить на вызов функции — скажет, что используется какое-то multi-value в single-value context. Падает либо парсер, либо тайпчекер
Подобное можно позволить, но я не хотел, т.к. мне самому не очень нравятся множественные возвращаемые значения в Go, их сложно композировать и куда-то передавать. Вот, я прилагал ссылочку
Возможно, это будет связано с темой для будущей статьи, если я другую идею удачно реализую)
их сложно композировать и куда-то передавать
Да, это и есть портал в ад. Однако, это уже есть в языке и напрашивается к использованию.
Как и такое:
value := if content, err := os.ReadFile(filename); err == nil { content } else { nil }
И кстати, `else { nil }` кажется можно позволять опускать в пользу zero value.

Давайте добавим в Go условное выражение