Впечатления от Go

В поисках «своего» языка программирования (к которому я сейчас отношу F#) я попробовал и Go.

По простоте он похож на Си (C), но лучше, поскольку из коробки есть приятные бонусы типа каналов, defer и поддержки Unicode (руны).

В качестве практики написал первую бета-версию утилиты, которую мне тогда было интересно реализовать: слияние файлов формата Markdown, но слияние не простое, а древовидное: разбор файлов по заголовкам (поддерживается только синтаксис, где заголовки отмечены количеством знаков #), построение дерева (как обычно, из структур с указателями на предыдущую структуру) и слияние деревьев.

Смысл в этом упражнении был такой, чтобы можно было писать договор кусками: в одном файле под заголовком «# Предмет договора» включается условие о предмете, и в том же файле (после) под заголовком «# Порядок приемки» указываются условия. В другом файле также могут быть заголовки «# Предмет договора» и «# Порядок приемки», но уже с другими пунктами, которые могли бы быть включены в договор.

      Первый файл                            Второй файл

# ПРЕДМЕТ ДОГОВОРА               |       # ПРЕДМЕТ ДОГОВОРА
                                 |
Пункт о предмете договора        |       Дополнительное условие
                                 |       о предмете договора
                                 |
# ПОРЯДОК ПРИЕМКИ                |       # ПОРЯДОК ПРИЕМКИ
                                 |
Приемка товара осуществляется    |       Дополнительное условие
в следующем порядке…             |       о порядке приемки.
                                 |
                                 |       # Порядок возврата товара
                                 |
                                 |       Условие о порядке возврата

На выходе получается

# ПРЕДМЕТ ДОГОВОРА

Пункт о предмете договора

Дополнительное условие
о предмете договора

# ПОРЯДОК ПРИЕМКИ

Приемка товара осуществляется
в следующем порядке…

Дополнительное условие
о порядке приемки.

# ПОРЯДОК ВОЗВРАТА ТОВАРА

Условие о порядке возврата

Аналогичным образом будут объединены заголовки второго уровня.

Подход не без недостатков — в частности, итоговый документ всё равно придётся немного посмотреть, но идея была такая, а Go дал возможность быстро её реализовать.