Впечатления от Go
В поисках «своего» языка программирования (к которому я сейчас отношу F#) я попробовал и Go.
По простоте он похож на Си (C), но лучше, поскольку из коробки есть приятные бонусы типа каналов, defer и поддержки Unicode (руны).
В качестве практики написал первую бета-версию утилиты, которую мне тогда было интересно реализовать: слияние файлов формата Markdown, но слияние не простое, а древовидное: разбор файлов по заголовкам (поддерживается только синтаксис, где заголовки отмечены количеством знаков #), построение дерева (как обычно, из структур с указателями на предыдущую структуру) и слияние деревьев.
Смысл в этом упражнении был такой, чтобы можно было писать договор кусками: в одном файле под заголовком «# Предмет договора» включается условие о предмете, и в том же файле (после) под заголовком «# Порядок приемки» указываются условия. В другом файле также могут быть заголовки «# Предмет договора» и «# Порядок приемки», но уже с другими пунктами, которые могли бы быть включены в договор.
Первый файл Второй файл # ПРЕДМЕТ ДОГОВОРА | # ПРЕДМЕТ ДОГОВОРА | Пункт о предмете договора | Дополнительное условие | о предмете договора | # ПОРЯДОК ПРИЕМКИ | # ПОРЯДОК ПРИЕМКИ | Приемка товара осуществляется | Дополнительное условие в следующем порядке… | о порядке приемки. | | # Порядок возврата товара | | Условие о порядке возврата
На выходе получается
# ПРЕДМЕТ ДОГОВОРА Пункт о предмете договора Дополнительное условие о предмете договора # ПОРЯДОК ПРИЕМКИ Приемка товара осуществляется в следующем порядке… Дополнительное условие о порядке приемки. # ПОРЯДОК ВОЗВРАТА ТОВАРА Условие о порядке возврата
Аналогичным образом будут объединены заголовки второго уровня.
Подход не без недостатков — в частности, итоговый документ всё равно придётся немного посмотреть, но идея была такая, а Go дал возможность быстро её реализовать.