Скачать плагин worldguard

Команды управления флагами i8086

Статья основана на материале xrnd с сайта asmworld (из учебного курса по программированию на ассемблер 16-битного процессора 8086 под DOS).

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

Как вы, наверно, помните флаги изменяются в результате выполнения арифметических и логических команд, а также команд сдвига. Регистр флагов можно сохранить в стек с помощью команды PUSHF и восстановить из стека с помощью команды POPF. Кроме того, в процессоре существуют специальные команды, которые позволяют явно установить или сбросить флаги CF, DF и IF. Это очень простые команды: у них нет операндов и результатом является только изменение значения соответствующего флага.

Флаг переноса CF

Команда CLC сбрасывает флаг CF.

Команда STC устанавливает флаг CF в единицу.

Команда CMC инвертирует значение флага CF.

Флаг направления DF

Этот флаг определяет направление обработки данных цепочечными командами (о них подробно расскажу в отдельной статье). Он должен устанавливаться или сбрасываться перед использованием этих команд.

Команда CLD сбрасывает флаг DF.

Команда STD устанавливает флаг DF в единицу.

Флаг прерывания IF

Этот флаг определяет, разрешены в данный момент прерывания или нет (о прерываниях тоже будет отдельная статья).

Команда CLI сбрасывает флаг IF (запрещает прерывания).

Команда STI устанавливает флаг IF в единицу (разрешает прерывания).

Команды LAHF и SAHF

Команда LAHF загружает младший байт регистра флагов в AH. Её удобно использовать, когда нужно получить значения сразу нескольких флагов. Порядок расположения флагов представлен на рисунке:

Команда SAHF выполняет обратную операцию — загружает содержимое AH в младший байт регистра флагов. Это позволяет одновременно изменить значения нескольких флагов. При этом биты 1, 3, 5 регистра AH игнорируются.

Пример программы

В качестве примера использования команды LAHF я написал процедуру, которая получает и выводит на консоль значения флагов SF, ZF, AF, PF и CF. Подобную процедуру можно использовать в отладочных целях. Достаточно добавить её вызов в то место программы, где хочется проверить состояние флагов.

Чтобы выводить значения отдельных битов удобно написать отдельную процедурку для печати флага CF в виде символа. Нужный бит будет помещаться в флаг CF при помощи команды сдвига SHL.

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

Полный исходный код примера:

Вывод программы выглядит так:

Упражнение

Чтобы потренироваться в работе с флагами напишите следующую программу. Вычислите сумму значений флагов CF, SF, ZF и выведите на консоль результат сложения. Если результат больше 1, инвертируйте значение флага CF.

Источник статьи: http://pro-prof.com/forums/topic/asm_i8086_22

Флаги и их использование

Чтобы активировать флаг надо написать в чате /region flag <название региона> <флаг> <значение переменной> Пример: /region flag(или же /rg f) <Название Региона> use deny (Отключение открытия дверей, кнопок, рычагов…), где «use» сам флаг (указаный в таблице снизу) «deny» значение переменной. Для разрешения флага используется параметр «allow», а для сброса — «none».
Вместо записи /region можно использовать /rg.

Флаги

Назначение

Значение по умолчанию

Тип переменной

passthrough

Используйте разрешено чтобы этот регион рассматривался как область, в которой отсутствует проверка флага build (используйте это, чтобы сделать простые no-PVP, и т. п

зоны).

Не Разрешено

State

build

Внимание! Рекомендуется не трогать этот флаг, поскольку его включение разрешит другим игрокам ломать блоки в вашем регионе.

Запрещено

State

pvp

Разрешает/запрещает PvP.

Разрешено (не работает на PvE серверах)

State

mob-damage

Разрешает мобам отнимать у вас здоровье (могут скинуть со скалы или кинуть в лаву).

Разрешено

State

mob-spawning

Разрешает спаун мобов.

Разрешено

State

creeper-explosion

Разрешает взрыв крипера (если отключено крипер вместо взрыва пропадет, или не нанесет ущерба постройкам).

Разрешено

State

enderman-grief

Разрешает страннику Края гриферить на вашей территории.

Разрешено

State

enderpearl

Разрешить или запретить использование Жемчуг Края

Разрешено

State

ghast-fireball

Разрешает урон от шаров гаста (так же как и крипера) .

Разрешено

State

sleep

Разрешить спать на кровати.

Разрешено

State

tnt

Разрешать взрыв ТНТ.

запрещено

State

lighter

Разрешить или запретить использование огнива.

Разрешено

State

fire-spread

Разрешить распространение огня.

Разрешено

State

lava-fire

Разрешает поджог от лавы.

Разрешено

State

lightning

Разрешить удар молнии.

Разрешено

State

chest-access

Запретить доступ к сундуку.

Запрещено

State

water-flow

Разрешить потоки воды

Разрешено

State

lava-flow

Разрешить потоки лавы

Разрешено

State

use

Разрешить использование кнопок, дверей, и т. п.

Разрешено

State

interact

Разрешить взаимодействовать с некоторыми предметами

Запрещено

State

vehicle-place

Разрешить размещение транспорта.

Разрешено

State

vehicle-destroy

Разрешение на удаление транспорта.

Запрещено

State

snow-fall

Разрешить выпадение снега.

Разрешено

State

leaf-decay

Разрешено

State

invincible

Временное бессмертие (приоритет операторской команды).

Запрещено

State

entry

Вход

Разрешено

State

exit

Выход.

Разрешено

State

exit-group

Выход группам.

Нет пользователей

Group

greeting

При входе в регион игрок видит в чате ваше пожелание «**Добро пожаловать, %name%.» голубым цветом.

String

farewell

Сообщение при выходе из региона

String

notify-enter

Показывать сообщение при входе в регион.

Запрещено

Boolean

notify-leave

Показывать сообщение при выходе из региона.

Запрещено

Boolean

deny-spawn

Запретить отдельным мобам спаун.

List

heal-delay

Скорость исцеления (установить частоту 1=1 сек.)

Не назначено

Integer

heal-amount

Исцеление здоровья (установить частоту 1=1 ())

Не назначено

Integer

teleport

Позволяет задать место для телепорта /region teleport

Не установлено

Location

spawn

Устанавливает место спауна: /region flag

Не установлено

Location

buyable

Не реализовано

Запрещено

Boolean

price

Устанавливает цену на регион (на серверах с валютой)

Не назначено

Double

blocked-cmds

Заблокировать указанные команды.

Не установлено

List

allowed-cmds

Запретить все команды кроме указанных (если делаете ловушку, оставьте команду /kill)

Не установлено

List

feed-min-hunger

Со скольки будет увеличиваться полоска голода в регионе.

Не установлено

Integer

feed-max-hunger

До скольки увеличится полоска голода в регионе (кормежка).

Не установлено

Integer

ice-form

Разрешение на формирование льда в регионе.

Не установлено

State

ice-melt

Разрешение на таяние льда

Не установлено

State

potion-splash

Разрешение на эффекты от взрывных зелий

Разрешено

State

pistons

Разрешить поршням двигать блоки

Разрешено

State

item-drop

Разрешить игрокам выбрасывать вещи

Разрешено

State

game-mode

Установить режим игры в регионе

Не установлено

State

send-chat

Разрешить писать в чат из региона

Не установлено

State

chorus-fruit-teleport

Запретить телепортацию через Хорус(1.9+)

Не установлено

State

ice-form

Разрешить или запретить формирование льда в регионе

Не установлено

State

ice-melt

Флаги и их использование

Чтобы активировать флаг надо написать в чате /region flag
<название региона> <флаг> <значение переменной>
значения пременной: »’allow(включать)»’, »’none(установить как по
умолчанию на сервере)»’, »’deny(отключить)»’ Пример:
/region flag Название Региона use deny (Отключение открытия дверей), где «use» сам флаг(указаный в табличке снизу) «deny» значение переменной.Пример2:
/rg flag Название региона use deny(Отключение открытие дверей, с сокращёным /region на /rg(тоже работает)).

Флаг Назначение Значение по-умолчанию Тип переменной
passthrough Используйте разрешено чтобы это регион рассматривался как
область, в которой отсутствует проверка флага build (используйте это,
чтобы сделать простые no-PVP, и т.п. зоны).
N/A State
build НЕ ТРОГАЙТЕ ЭТОТ ФЛАГ. Все будет нормально работать и без изменения этого флага.
Этот флаг перекрывает все области проверки строительства, либо
разрешить или запретить. Запретить всегда имеет преимущество перед
разрешить. Если вы хотите просто защитить свой регион, не трогайте этот
флаг.
N/A State
pvp Разрешает/запрещает PvP. Разрешено (не работает на серверах с отключеным PvP) State
mob-damage Разрешает мобам отнимать у вас здоровье (могут скинуть со скалы или кинуть в лаву). Разрешено State
mob-spawning Разрешает спавн мобов. Разрешено State
creeper-explosion Разрешает взрыв крипера (если отключено крипер вместо взрыва пропадет, или не нанесет ущерба постройкам. Разрешено State
enderman-grief Запрещает Endermany гриферить на вашей территории. Разрешено State
ghast-fireball Разрешает урон от шаров гаста (так же как и скипетра) . Разрешено State
sleep Разрешить спать на кровати. Разрешено State
tnt Разрешат взрыв тнт. Разрешено State
lighter Разрешить или блокировать использование огнива. Разрешено State
fire-spread Разрешить распространение огня. Разрешено State
lava-fire Разрешит поджог от лавы. Разрешено State
lightning Разрешить удар молнии. Разрешено State
chest-access Запретить доступ к сундук. Запрещено State
water-flow Разрешить потоки воды Разрешено State
lava-flow Разрешить потоки лавы Разрешено State
use Разрешить использование кнопок,и дверей т.п. Разрешено State
vehicle-place Разрешить размещение транспорта. Разрешено State
vehicle-destroy Разрешение на удаление транспорта. Запрещено State
snow-fall Разрешить выпадение снега. Разрешено State
leaf-decay Разрешить опадение листвы. Разрешено State
invincible Временное бессмертие (приоритет операторской команды). Запрещено State
entry Вход Разрешено State
entry-group Вход группам. Нет пользователей Group
exit Выход. Разрешено State
exit-group Выход группам. Нет пользователей Group
greeting При входе в регион игрок видит в чате ваше пожелание «**Добро пожаловать, %name%.» голубым цветом. <нет надписи> String
farewell Сообщение при выходе с региона <нет надписи> String
notify-enter Показывать сообщение при входе в регион. Запрещено Boolean
notify-leave Показывать сообщение при выходе из региона. Запрещено Boolean
deny-spawn Запретить отдельным мобам спавн. <нет> List
heal-delay Скорость исцеления (установить частоту 1=1 сек.) Не назначено Integer
heal-amount Исцеление здоровья (установить частоту 1=) Не назначено Integer
teleport Не реализовано Не установлено Vector
teleport-group Не реализовано Не установлено Group
spawn Не реализовано Не установлено Vector
spawn-group Не реализовано Не установлено Group
buyable Не реализовано Запрещено Boolean
price Устанавливает цену на регион (на серверах с валютой) Не назначено Double
blocked-cmds Заблокировать указанные команды. Не установлено List
allowed-cmds Запретить все команды кроме указанных (если делаете ловушку, оставьте команду /kill) Не установлено List
feed-min-hunger Minimum hunger the feed flags will drop a player to. Не установлено Integer
feed-max-hunger До скольки увеличится полоска голода в регионе (кормежка). Не установлено Integer
ice-form Разрешение на формирование льда в регионе. Не установлено State
ice-melt Разрешение на таяние льда Не установлено State

Крафт флага и нанесение линий

Чтобы сделать флаг, откройте верстак и расставьте в верхнем и центральном ряду шесть блоков шерсти, а в нижнем деревянную палку посередине. В итоге один флаг будет готов.

Крафт белого флага.

Если вы будете использовать черную шерсть, то знамя будет тёмного цвета.

Покрасив шерсть можно можно добиться любого оттенка.

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

Чтобы нанести линию в середине, откройте верстак и разместите три зелёных красителя в нижнем ряду, а флаг по центру нижнего или верхнего ряда.

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

Для получения креста на флаге расставьте материалы в следующем порядке:

  • Верхний ряд: краситель посередине и флаг с одного из боков;
  • Средний ряд: три красителя;
  • Нижний ряд: краситель посередине.

В итоге у вас получится флаг схожий со знаменем крестоносцев.

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

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

Как сделать узоры на флаге

Начиная с Майнкрафт версии 1.14 для того, чтобы сделать узоры на флаге, изначально тебе понадобятся: ткацкий станок, флаг любого цвета и краситель отличный от цвета флага (в отдельных случаях — трафарет, для создания специальных флагов). Для версии игры ниже 1.14 все тот же список за исключением ткацкого станка.

Создание флага с узором для Майнкрафт версии 1.14 и выше

Рецепт крафта ткацкого станка прост — понадобятся две нити и две любые доски:

Ткацкий станок — это блок на подобие верстака, именно в нем мы и будем делать различные красивые узоры.

Базовые узоры

Разместив в верстаке флаг и краситель, нам станет доступен на выбор один из 32 базовых узоров:

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

Таким образом, в ткацком станке можно сделать флаг с наложением друг на друга максимум 6 узоров, при этом используя как один краситель, так и каждый раз новый.

Узоры требующие трафарет

В Майнкрафт доступно создание 4 специальных флагов: “Цветок”, “Крипер”, “Череп”, “Нечто”, которые нуждаются в крафте трафарета — узор флага.

Для создания флага со специальным узором тебе понадобится бумага и один из предметов на выбор:

  • нивяник (ромашка), для того чтобы сделать флаг с узором “Цветок”.Нивяник можно найти на равнинах, подсолнечниковых равнинах и в цветочном лесу;
  • голова крипера для флага с узором “Крипер”. Получить голову крипера можно путем подрыва одного заряженного молнией крипера другого”;
  • череп визер-скелета пригодится тебе если ты захочешь сделать флаг “Череп”.Этот блок можно получить если убить визер-скелета (встретить его можно в адской крепости в Аду), правда голова выпадет с небольшой вероятностью;
  • зачарованное золотое яблоко для флага “Нечто”.Зачарованное золотое яблоко можно найти в натуральной генерации в сундуке пустынного храма, сокровищнице, в лесном особняке, шахте или же скрафтить самому из яблока и 8 золотых блока (правда крафт доступен только до версии игры 1.8).

Крафт бумаги прост, понадобится 3 сахарных тростника:

Также существую 2 узора которые можно встретить в натуральной генерации: “Морда” — в сундуках развалин бастиона, и “Глобус” — его можно купить у жителя картографа с уровнем Мастер (только в версии Java Edition, в Bedrock Edition такого узора нет). При крафте этих узоров и бумаги можно сделать такие крутые флаги:

Как создать флаг в Майнкрафт в версиях ниже 1.14

Узоры флага в Майнкрафт до версии 1.14 делаются в верстаке. Для создания узора необходим флаг любого цвета и краситель для узора. Те узоры, которые требуют трафарет в версиях Майнкрафт выше 1.14, по аналогии также создаются в верстаке.

Разноцветный флаг с узором создается путем выстраивания желаемого узора из красителей в верстаке

Размещения флага при этом не важно, но очень важно соблюдать размещение красителя, при этом нельзя создать узор, который не предусмотрен игрой

Всевозможные вариации можно найти на скриншотах ниже:

Действия с регионами[]

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

Доступные команды
  •  — создает регион и закрепляет за ним владельцев.
  •  — создаёт регион без начальных флагов. Помогает администрации, так как приватит поверх других регионов.
  •  — заменяет территорию региона на выделенную.
  •  — добавляет пользователя в регион.
  •  — добавляет владельца региона.
  •  — удаляет пользователя региона.
  •  — удаляет владельца региона.
  •  — устанавливает флаг на регион. Переменные:  — не задана,  — разрешено,  — запрещено.
  •  — полностью удаляет регион.
  •  — уменьшает регион на заданное число от игрока (от вас)

Как поставить приват в майнкрафте на сервере

  1. Первым делом вам потребуется скачать и установить плагин, который позволяет редактировать карту. Одним из самых популярных плагинов, дающих такую возможность, является WorldEdit. С его помощью вы сможете строить текстуры, а также перемещать, копировать, удалять и добавлять блоки. 
  2. Затем необходимо выделить территорию, которую вы хотите заприватить. Для этого пропишите в чат следующую команду://wand
  3. После этого вы обнаружите у себя в инвентаре топорик. Теперь постройте воображаемый куб, который будет обозначать границы территории, которую вы хотите сделать частной. С помощью левой кнопки мыши (при условии, что выданный топорик находится у вас в руках) обозначьте один из нижних углов воображаемого куба.
  4. Теперь нужно обозначить вторую точку, которая будет располагаться по диагонали внутри куба от первой обозначенной точки. После ее установки, все, что находится внутри воображаемой фигуры будет запривачено. Поздравляем, теперь вы знаете,как приватить территорию в minecraft на сервере, но это еще не всё.

Как сделать цветной флаг в Майнкрафте

Теперь ты знаешь, что в естественной среде можно встретить овец с белой, светло-серой, серой, черной, коричневой и розовой шерстью. Но как сделать флаг каким-либо другим цветом, если в Майнкрафт возможно сделать как минимум 16 флагов разных цветов? И что делать, если мы встречаем на своем пути только белых овец, ведь их вероятность встретить самая большая?

Для того чтобы получить не стандартный белый, а красивый цветной флаг у тебя есть несколько вариантов:

  1. искать одну из оставшихся 5 овец, вариация цветов которых не слишком богата, чтобы получить шерсть отличного от белого оттенка;
  2. окрасить белую шерсть любым из 15-ти красителей.

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

Большую их часть можно скрафтить из разных цветов и крафта других красителей между собой:

  • черный краситель — получается путем крафта розы иссушения или чернильного мешка;
  • красный краситель — для крафта понадобится один из ингредиентов на выбор: свекла, мак, красный тюльпан или розовый куст;
  • коричневый краситель — какао-бобы;
  • синий краситель — крафт василька или лазурита;
  • фиолетовый краситель — необходим один синий краситель + красный краситель;
  • бирюзовый краситель — крафт синего красителя и кактусовой зелени;
  • светло-серый краситель — крафт одного черного красителя и двух белых или серого красителя с белым, или белого тюльпана, или нивяника, или же хаустонии серой;
  • серый краситель — смесь белого и черного красителя;
  • розовый краситель — можно получить путем крафта белого и красного красителя, либо из цветков пиона или розового тюльпана;
  • лаймовый краситель — создается путем слияния кактусовой зелени и белого красителя;
  • желтый краситель — понадобится одуванчик или подсолнечник;
  • светло-синий краситель — белый и синий краситель, либо цветков синей орхидеи;
  • сиреневый краситель — сирень или лук (цветок), либо фиолетовый + розовый краситель, или синий + красный + розовый, или синий + два белых + красный краситель;
  • оранжевый краситель — понадобится оранжевый тюльпан, либо красный и желтый краситель;
  • белый краситель — крафт костной муки или ландыша.

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

Имея в арсенале все предметы, переходи к крафту красивого цветного флага в верстаке:

Таким образом, из белой шерсти и любого, из 15 красителей, ты можешь создать однотонный цветной флаг.

А как получить неограниченное количество цветной шерсти используя минимум красителей читай в статье о ножницах в Майнкрафт.

Использование пакета Flag в Go

Введение

Утилиты командной строки редко можно использовать в готовом виде без дополнительной настройки. Хорошие значения по умолчанию очень важны, однако полезные утилиты должны принимать конфигурацию от пользователей. В большинстве платформ утилиты командной строки принимают флаги для настройки выполнения команд. Флаги — это ограниченные значениями ключей строки, добавляемые после имени команды. Go позволяет настраивать утилиты командной строки, принимающие флаги посредством пакета flag из стандартной библиотеки.

В этом обучающем руководстве мы покажем различные способы использования пакета flag для построения различных видов утилит командной строки. Флаги используются для контроля вывода программы, ввода аргументов позиционирования с сочетанием флагов и других данных, а также для реализации субкоманд.

Выделяем территорию

Выделить участок можно несколькими способами. Самый распространенный – это с использованием топора. При этом его не обязательно создавать, можно просто прописать в чате команду;

Далее нужно выделить две точки. Если провести аналогию с параллелепипедом, то точки должны соединять его диагональ.

Левой кнопкой мыши сначала отмечаем самую нижнюю точку вашей территории. Если координаты появились, значит вы все сделали правильно. Далее нужно отметить самую высокую точку. Переместите персонажа в нужное место и поднимайтесь на необходимую высоту и правой кнопкой мыши отмечаете вторую точку.

Можно не выбирать самые высокие или низкие точки, а отметить те, которые находятся на одной высоте. После этого в чате прописать две команды:

Первая команда отмечает высоту 20-ти кубов вниз, вторая соответственно высоту 20-ти кубов вверх.Число кубов можно менять по своему желанию. Это избавит от построения высоких столбов и рытья глубоких ям.

Может возникнуть вопрос, зачем отмечать территорию, которая уходит вглубь или находится наверху. Ведь на ней нет никаких построек. Это делается для того, чтобы злые игроки не смогли навредить вам, например, залив всю территорию лавой или не сделали подкоп и не добрались до ваших сундуков. 

Следующий способ, схож с предыдущим. Только вместо топора мы будем использовать команды. Также нужно встать в самую нижнюю точку своей территории и в чате прописать команду;

Далее перемещаем своего персонажа к самой высокой точке и пишем;

Также можно использовать команды;

Они отмечают точки, на которые смотрит персонаж. То есть, куда направлен крестик в середине экрана.

Самое главное, не забывать, что территория приватится наискосок. Если вы выделите точками прямую линию, то заприватится только то, что находится между двумя этими точками.

Использование FlagSet для реализации субкоманд

В современных приложениях командной строки часто реализуются субкоманды, что позволяет объединить набор инструментов в одной команде. Самый известный инструмент, использующий такую схему, называется git . При проверке такой команды как git init командой является git , а init является субкомандой git . Важная характеристика субкоманд заключается в том, что каждая субкоманда может иметь собственный набор флагов.

Приложения Go могут поддерживать субкоманды с собственным набором флагов, используя оператор типа flag.( *FlagSet) . Для иллюстрации мы создадим программу, которая будет реализовать команду, используя две субкоманды с разными флагами.

Создайте новый файл с именем subcommand.go и добавьте в него следующий код:

Эта программа разделена на несколько частей: функция main , функция root и отдельные функции для реализации субкоманды. Функция main обрабатывает ошибки, возвращаемые командами. Если любая функция возвращает ошибку, выражение if определит ее, распечатает ошибку и закроет программу с кодом состояния 1 , сообщающим операционной системе о возникновении ошибки. Внутри функции main мы передаем все аргументы вызова программы в функцию root . Удалим первый аргумент, представляющий собой имя программы (в предыдущих примерах ./subcommand ), выделив срез os.Args.

Функция root определяет []Runner , где определяются все субкоманды. Runner — это интерфейс субкоманд, позволяющий функции root получить имя субкоманды с помощью Name() и сравнить его с содержанием переменной subcommand . После обнаружения правильной субкоманды посредством итерации переменной cmds мы инициализируем субкоманду с остальными аргументами и вызываем метод Run() для этой команды.

Мы определяем только одну субкоманду, хотя данная структура позволяет легко создавать и другие команды. Экземпляр GreetCommand создается с помощью NewGreetCommand при создани нового *flag.FlagSet с помощью flag.NewFlagSet . flag.NewFlagSet принимает два аргумента: имя набора флагов и стратегию отчета об ошибках проверки синтаксиса. Имя *flag.FlagSet доступно с помощью flag.( *FlagSet). Метод Name. Мы используем этот метод в (*GreetCommand). Name() так, что имя субкоманды соответствует имени, которое мы присвоили *flag.FlagSet . NewGreetCommand также определяет флаг -name аналогично предыдущим примерам, но вместо этого вызывает его как метод поля *flag.FlagSet *GreetCommand , gc.fs . Когда функция root вызывает метод Init() команды *GreetCommand , мы передаем указанные аргументы методу Parse поля *flag.FlagSet .

Субкоманды будет проще увидеть, если вы соберете эту программу и запустите ее. Выполните сборку программы:

Теперь запустите программу без аргументов:

Вы увидите следующий результат:

Теперь запустите команду с субкомандой greet :

Результат будет выглядеть следующим образом:

Теперь используйте флаг -name с greet для указания имени:

Программа выведет следующее:

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