Nano Hash - криптовалюты, майнинг, программирование

Лучший способ передачи длинных аргументов в программе GoLang CLI и ее ограничениях

Я пишу программу CLI в GO, и мне нужно передать довольно длинный список аргументов основной функции. На данный момент я использую стандартный способ передачи аргументов (значения, разделенные пробелами), а затем извлекаю их с помощью os.Args[index].

Итак, мои вопросы:

  1. Есть ли ограничение на количество аргументов, которые можно передать?
  2. Есть ли ограничение на длину строкового аргумента?
  3. Есть ли другой способ добиться этого, и если да, то как?

  • Ограничения зависят от операционной системы. Вы можете передавать аргументы любым другим способом, через файлы, сериализованные на стандартном вводе, переменные среды и т. д. 10.10.2017
  • Рассматривали ли вы возможность использования пакета для управления аргументами командной строки? Такой пакет, как urfave/cli, может оказаться полезным. 11.10.2017
  • Что касается пункта 3 в вашем вопросе, другой способ добиться этого - я бы предложил использовать файл конфигурации (что-то простое, как yaml). Таким образом, вы просто передаете один аргумент командной строки, путь к файлу конфигурации. 11.10.2017

Ответы:


1
  1. Нет, что касается перехода. Аргументы командной строки преобразуются в []string. , так что на этом уровне все зависит от того, сколько памяти доступно. Но комментарии ниже верны. Ваша система будет иметь свои собственные нижние пределы, которые вы достигнете в первую очередь.
  2. То же, что и выше.
  3. If you find yourself passing tons for args for every run:
    • if they don't change much, do they make sense as sane defaults for your flags?
    • если они не имеют смысла в качестве значений по умолчанию, подумайте о том, чтобы перейти к их чтению из файла конфигурации. CSV, YAML, что угодно.

Не зная больше, я бы порекомендовал файл конфигурации. Они упрощают отслеживание различных конфигураций/запусков, их легче редактировать, чем длинный список аргументов строки cmd, и вы всегда можете написать так, чтобы аргументы в строке cmd перезаписывали значения в конфигурации.

Ознакомьтесь с awesome-go, чтобы узнать о библиотеках, которые уже делают это, особенно в разделе командная строка и конфигурация.

10.10.2017
  • 1 и 2 не обязательно верны - они зависят от платформы и оболочки. Хотя остальное в точку. 10.10.2017
  • Всегда должно быть ограничение на размер аргументов. ARG_MAX определяет его в системах POSIX, у меня сейчас 262144. 10.10.2017
  • Да, спасибо, Адриан и ДжимБи. Я добавил ваши пояснения к моему ответу. 11.10.2017
  • Спасибо вам всем! Файлы конфигурации не подходят, поскольку передаваемые параметры являются динамическими, но похоже, что даже значения по умолчанию удовлетворят мои потребности. in-ulm.de/~mascheck/various/argmax на будущее ссылка 11.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..