Супер-простой способ повторного использования и обмена вашими решениями!

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

Нужна ваша программа для вывода информации на стандартный вывод? Вы можете импортировать пакет «fmt» в свой файл и использовать функцию Println, вызвав fmt.Println(“I called fmt”). Хороший!

Как насчет того замечательного решения, которое *вы* создали? Вы, вероятно, уже поняли, что можете повторно использовать свое решение в нескольких сценариях.

Возможные способы повторного использования вашего кода Go:

❌ Неоднократно копируйте и вставляйте свое решение в другие файлы.

✔️ Создайте пакет Go, который можно легко импортировать и использовать.

✔️ ✔️Создайте и разместите пакет Go, который любой может импортировать и использовать

Наш вариант использования

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

Налоговые скобки и ставки меняются ежегодно. Налоговая система США является прогрессивной. Это означает, что ставка налога увеличивается по мере увеличения дохода. Это также градуированная система. Это означает, что первые 10 000 долларов дохода облагаются налогом по ставке 10%, а следующие 30 000 долларов дохода облагаются налогом по ставке 12% и т. д. Да, и скобки устанавливаются по-разному, если вы женаты, одиноки или считаетесь главой семьи. Ну, это отстой.

Вы знаете, что не можете просто сказать своему клиенту, чтобы он сделал фиксированную ставку в размере 20%. Вы знаете, что будете полоскать и повторять эти расчеты для многих клиентов на протяжении многих лет. Вы знаете, что есть другие бухгалтеры и консультанты, которые хотели бы избежать утомительных налоговых расчетов. Вы знаете, что устали гуглить «налоговые скобки [вставить год]».

Наше решение

  • Используйте Go, чтобы решить для налогов
  • Разместите наше решение Go на Github
  • Импортируйте налоговый пакет всякий раз, когда нам нужно рассчитать налоги

Примечание. В этой статье используются следующие концепции Go: структуры, функции, методы, интерфейсы, карты и срезы. Посетите https://go.dev/doc/, чтобы узнать больше.

Наш файл Go

Начнем с создания папки на нашем компьютере с именем taxgo. Далее мы создадим файл tax.go в папке taxgo.

Мы будем рассчитывать налоги на основе информации о налогоплательщике. Давайте определим наш Taxpayer в структуре. Обратите внимание, что пакет называется tax.

Вот наш tax.go на данный момент:

Status в структуре Taxpayer — это статус налоговой декларации. Нам нужно выбрать набор налоговых категорий, соответствующих статусу.

Я использовал следующие сокращения для статусов подачи:

  • ИНД: индивидуальный
  • MFS: Замужняя подача раздельно
  • MFJ: женаты, подают документы вместе
  • HOH: Глава семьи

Каждый набор налоговых групп имеет статус подачи и набор градуированных порогов для прогрессивных налоговых ставок (почему так сложно!). Вот структура для налоговых скобок:

Теперь мы можем создать метод для расчета федеральных налогов. Метод fedtax имеет аргумент получателя налогоплательщика и возвращает число float64.

func (tp Taxpayer) fedTax() float64 {}

Давайте сделаем несколько карт. Наша первая карта будет для налоговых ставок. Ключом для нашей карты ставок будет год, а значением будет фрагмент float64, содержащий налоговые ставки. Это часть метода fedTax.

rates := make(map [int] []float64) think: rates[Year] = [tax rates … ]

Наша карта для групп доходов также будет использовать год в качестве ключа. Значением будет фрагмент типа Bracket (напоминание: в скобках типа есть поля для состояния и пороговых значений)

brackets := make(map[int] []Bracket) think brackets[Year] = {Status, Thresholds … }

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

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

Мы рассмотрим карту скобок и добавим правильный набор скобок дохода на основе информации Taxpayer (вот почему у нас есть структура налогоплательщика).

Наш метод fedTax теперь имеет правильный набор скобок для расчета налога. Расчет налога будет представлять собой сумму суммы, рассчитанной по каждой ставке (на основе года, статуса и дохода Taxpayer).

Мы заявляем, что переменный налог будет удерживать значение по мере его увеличения в каждой комбинации налоговой категории и ставки. Прокручиваем скобки налогоплательщика. Если доход налогоплательщика превышает текущую итерацию их скобок (переменная myBrackets), сумма налога, добавленная к переменной tax, составляет: (арендодатель их дохода и верхняя часть этой скобки) * (ставка налога для этой скобки и год ).

Это было легко! Но есть одна загвоздка. Мы намеренно избегали верхней налоговой категории (Эй, это точно не моя личная налоговая категория!).

Если налогоплательщик находится в верхней скобке (доход › самая высокая пороговая сумма), мы добавим сумму налога в этой верхней скобке к переменной tax:

Налоги теперь возвращаются из метода fedTax. Мы все? Мы могли бы быть сделаны.

Мы также можем сделать этот пакет taxgo более надежным в будущем. Возможно, когда у этого занятого бухгалтера будет свободное время 😆

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

Отправьте на GitHub и протестируйте

  1. Запустите Git init локально
  2. Добавить и зафиксировать налог.go. git commit -am “initial commit”
  3. Создайте репозиторий на GitHub с тем же именем, что и локальный каталог taxgo
  4. НЕ выберите вариант создания файла ReadMe.
  5. Скопируйте и вставьте команды терминала ниже (ваше имя пользователя и репо будут заполнены для вас)

6. Создайте новый файл для тестирования. Я собираюсь перейти на Replit, чтобы иметь чистую среду, чтобы опробовать пакет.

7. Создайте файл main.go и запустите go get github.com/massia1207/taxgo в консоли.

8. Настройте пробную версию Taxpayer или две и распечатайте некоторые результаты.

Хотите рассчитать налоги прямо в электронной таблице? Ознакомьтесь с разделом Налоговые функции в Google Workspace Marketplace.