DEV Community

Danila Satsuk
Danila Satsuk

Posted on

REPL в Go? Реально в Go!

Привет! Как можно красиво и с удобством создавать REPL (Read-Eval-Print-Loop) в Golang?

Screenshot

Небольшое предисловие:
Не так давно я решил написать проект, который заключается в создании защищенного хранилища. Для него мне потребовался удобный инструмент по типу REPL, чтобы можно было работать с хранилищем напрямую из консоли. Поискав удобные инструменты в интернете - я так ничего и не нашел. Что-ж... Пора сделать свое!

Для этого я написал пакет (модуль, но я зову пакетами) Replyme - инструмент для создания REPL в Golang.

Как его установить?

Все просто!

go get github.com/danyasatsuk/replyme
Enter fullscreen mode Exit fullscreen mode

Как использовать?

Для начала опишите свою REPL-сессию:

app := &replyme.App{
    Name: "mysuperapp",
    Usage: "Мое супер приложение",
    Commands: []*replyme.Command{
        {
            Name: "hello",
            Usage: "Выводит `Hello, World!` на экран",
            Action: func(ctx *replyme.Context) error {
                ctx.Print("Hello, World!")
                return nil
            },
        },
    },
}
Enter fullscreen mode Exit fullscreen mode

После этого запустите Replyme:

err := replyme.Run(app)
if err != nil {
    panic(err)
}
Enter fullscreen mode Exit fullscreen mode

Готово! Вы молодец!

Полный код

package main

import "github.com/danyasatsuk/replyme"

func main() {
  app := &replyme.App{
    Name: "mysuperapp",
    Usage: "Мое супер приложение",
    Commands: []*replyme.Command{
      {
         Name: "hello",
         Usage: "Выводит `Hello, World!` на экран",
         Action: func(ctx *replyme.Context) error {
           ctx.Print("Hello, World!")
           return nil
         },
      },
    },
  }
  err := replyme.Run(app)
  if err != nil {
    panic(err)
  }
}
Enter fullscreen mode Exit fullscreen mode

Информация о проекте

Ссылка на Github: https://github.com/danyasatsuk/replyme

Пока что проект только в начальной стадии разработки, его стабильная версия еще не готова. Если вы столкнулись с ошибками, пожалуйста: создайте issue на Github, и дайте обратную информацию!

Top comments (0)