Привет, Хабр!

Сегодня хочется поделиться с вами открытием, которое, возможно, окажется полезным для тех, кто работает с языком программирования Go и ищет надежный инструмент для вычисления выражений. Речь пойдет о библиотеке expr от Anton Medvedev.

Что такое expr?

Expr — это библиотека для вычисления выражений на Go. С ее помощью вы можете анализировать, проверять и интерпретировать простые выражения на Go без необходимости использования внешних зависимостей или сложных конструкций.

Основные возможности:

  1. Быстродействие: Библиотека оптимизирована для высокой производительности.

  2. Безопасность: Expr предоставляет безопасный контекст выполнения, благодаря чему ваши приложения защищены от потенциальных угроз.

  3. Типизация: Вам не нужно беспокоиться о типах — Expr учитывает их при вычислении выражений.

  4. Поддержка функций: Вы можете определить собственные функции и использовать их в выражениях.

  5. Гибкость: Библиотека может быть легко интегрирована в ваш проект и настроена согласно вашим требованиям.

Как это работает?

Давайте рассмотрим простой пример использования:

package main

import (
	"fmt"
	"github.com/antonmedv/expr"
)

func main() {
	env := map[string]interface{}{
		"foo": 1,
		"bar": 2,
	}

	code, err := expr.Compile("foo + bar", expr.Env(env))
	if err != nil {
		panic(err)
	}

	out, err := expr.Run(code, env)
	if err != nil {
		panic(err)
	}

	fmt.Println(out) // вывод: 3
}

В данном примере мы создаем простое выражение "foo + bar" и затем вычисляем его с использованием предоставленного окружения env. Результатом будет число 3.

Зачем это может понадобиться?

Expr может пригодиться в различных сценариях:

  • Динамическая конфигурация: Вы можете позволить пользователям вашего приложения задавать конфигурационные параметры с помощью выражений.

  • Логика бизнес-правил: Expr позволяет интерпретировать сложные бизнес-правила, заданные пользователями.

  • Вычисления на лету: Вам не нужно ждать пересборки приложения, чтобы изменить какую-либо логику вычисления.

Заключение

Expr — это мощный и гибкий инструмент для работы с выражениями на Go. Он легко интегрируется в различные проекты и позволяет безопасно интерпретировать выражения без дополнительных затрат. Если вы работаете на Go и ищете решение для работы с выражениями, рекомендую обратить внимание на эту библиотеку!

Всем успешного кодинга!

Комментарии (5)


  1. hello_my_name_is_dany
    11.08.2023 23:08
    +6

    вы б хоть рассказали, как технически реализовали или, на худой конец, конкретные фичи с примерами. А то таких библиотек уже видали много


  1. capjdcoder
    11.08.2023 23:08
    +11

    Я правильно понимаю что ЯП в заголовке означает Язык Программирования? А дальше зашел в поиске интересной концепции, но увидел просто рекламу собственной библиотеки, но ни слова о Языке Программирования.

    Синтаксис? Концепция? Или только самореклама?

    Что я сделал не так?


    1. saboteur_kiev
      11.08.2023 23:08
      -1

      Так он не первый раз свои поделки странным образом рекламирует


  1. ivankudryavtsev
    11.08.2023 23:08
    +8

    UPD: Похоже, либа прикольная, но автор не "писатель".

    Дорогой Антон Медведев, почему Вы пишете о себе в третьем лице? Похоже, что Вам статью надоело писать еще раньше чем Вы ее начали. Микро языки вычисления выражений - это отличная штука, которая много где нужна, но Ваш вялый "промоушн" не располагает к использованию Вашего изделия, хотя судя по GitHub-у у Вас все нормально с использованием. Непонятно зачем данный опус тогда...

    Я пользуюсь https://github.com/ISibboI/evalexpr, правда не для Golang, а для Rust, так там README.md в 10 раз длиннее вашей записки.


    1. Elfet Автор
      11.08.2023 23:08

      но автор не "писатель"

      Это правда)))

      Попробую ещё раз написать более подробную статью реализацией.