Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (23)

Лучшие ответы пользователя

Все ответы (59)
  • Порядок действий для оформления самозанятого, для иностраных платежей и выбор банка?

    @falconandy
    Мой недавний опыт
    1. На сайте Альфа-банка заказал бесплатную дебетовую карту с выдачей в отделении (отделение выбрал центральное с "моментальной" выдачей). Альфа-банк, потому что в моем регионе у них есть банкоматы с приемом/выдачей валюты. Заранее установил мобильное приложение Альфа-банка. Через пару часов туда подъехал, по-моему по моей заявке еще никто ничего не делал. Поинтересовались, для чего мне их карта и выдали мне именную рублевую дебетовую карту (в заявке указывал MasterCard, но принесли Visa - мне было непринципиально), и дополнительно я попросил долларовую (собственно для этого я и забирал лично, хотя можно было заказать доставку) - выдали неименную. Мобильное приложение Альфы понадобилось, чтоб тут же активировать карты. Всё заняло минут 20-25, но мои данные у них уже были, несколько лет назад я получал через них зарплату.
    2. Зарегистрировался как самозанятый через веб-доступ налоговой (в моем регионе доступно с июля 2020 г.).
    3. Установил мобильное приложение Мой Налог. В мобильном приложении Альфа-банка зарегистрировался как уже зарегистрированный самозанятый.
    4. Добавил 2 новых счета (рублевый и долларовый), назвал их, чтоб было понятно что они для учета доходов от самозанятости.
    5. Добавил эти счета в Upwork (рублевый "Direct to Local Bank" и долларовый "Wire Transfer")
    6. С рублевым счетом проблем не было, а в долларовом не совпало моё имя (в Альфе было еще отчество и транслитерация одной буквы не совпадала) - отправил запрос в поддержку Upwork и счет в течение нескольких часов одобрили.
    7. Добавленные счета становятся доступными для вывода через 3 дня.
    8. Через 3 дня вывел в долларах через "Wire Transfer", на счет Альфы пришло на следующий день. Никакого явного валютного контоля не было, документы не просили, комиссий не снялось (только $30 снял Upwork как и положено).
    9. Самостоятельно посчитал пришедшую сумму в рублях по курсу ЦБ на дату получения денег на счет.
    10. В мобильном приложении Альфы создал новый чек от иностранной организции (Upwork Global Inc.), указал сумму в рублях. Проверил в приложении Мой Налог, что чек нормально ушел и начислился налог (по факту реального налога пока нет, т.к. действует налоговый бонус около 22000 руб. = 10000 руб + чуть больше 12000 руб.)
    11. На всякий пожарный случай: скачал шаблон Confirmation of Service, заполнил и отправил в поддержку Upwork. Полученный от них подписанный экземпляр сохранил.
    Ответ написан
  • Много исходящих запросов на сторонний API за короткое время и преобразование в JSON, справится ли node JS, или взять Go?

    @falconandy
    1. Можете начать с реализации отправки запросов и получения результатов, но результаты запросов просто игнорируйте без всяких преобразований. Сравните Go и Node между собой и с лимитом в 3 секунды. Если вышли за 3 секунды, думайте, как получать результаты быстрее или поднимайте лимит.
    2. Если вам нужна скорость, то нужно ли вам полноценное преобразование тело-запроса -> json -> объект -> БД? Можете ли вы обойтись более короткой цепочкой, например тело-запроса -> нужные поля -> БД?
    3. Для Go можете попробовать https://github.com/mailru/easyjson или аналоги, если структура объектов известна заранее. В этом случае преобразование json -> объект должно быть быстрее, чем со стандартной библиотекой.
    4. Для Go эта задача вполне в его нише - реализация должна быть простой. В общем случае что-то типа N горутин на выполнение запросов, M горутин для конвертации результатов, K горутин для записи в БД. Обычно K=1 и в этой горутине можно писать записи в БД пачками (batches), что быстрее, чем по одной записи.

    Весь день голову ломаю.

    За день уже могли бы реализовать на том, что знаете (nodejs) и если не устроит по результатам, попробовать Go.
    Ответ написан
    1 комментарий
  • Go пакеты для комфортной работы с json Есть?

    @falconandy
    В некоторых случаях удобно использовать
    для чтения https://github.com/tidwall/gjson
    для записи https://github.com/tidwall/sjson
    Ответ написан
    1 комментарий
  • Не будет гонки и повреждения данных в памяти?

    @falconandy
    По-моему вы переусложняете без необходимости. Если значения из конфига только читаются, то потокобезопасность не нужна. Если же у вас предполагается еще и изменение, то в пул возвращаются указатели на "порченные" объекты, что тоже неправильно.
    Если возможно, конфиг лучше прочитать в начале выполнения, а также паниковать на уровне main.
    В результате и код проще, и тормозить нечему:
    package config
    
    import (
    	"encoding/json"
    	"fmt"
    	"os"
    )
    
    type Cfg struct {
    	// Fields
    }
    
    var (
    	cfg *Cfg
    )
    
    func Config() *Cfg {
    	return cfg
    }
    
    func LoadConfig() error {
    	f, err := os.Open("./config/config.json")
    	if err != nil {
    		return fmt.Errorf("can't open config file: %w", err)
    	}
    	defer f.Close()
    
    	dec := json.NewDecoder(f)
    	var c *Cfg
    	if err := dec.Decode(c); err != nil {
    		return fmt.Errorf("can't decode config file: %w", err)
    	}
    
    	if err := validate(c); err != nil {
    		return fmt.Errorf("can't validate config file: %w", err)
    	}
    	
    	cfg = c
    
    	return nil
    }
    
    func validate(cfg *Cfg) error {
    	// Logic
    	return nil
    }
    Ответ написан
    Комментировать
  • Можно ли (Как) установить модуль Golang из локального источника?

    @falconandy
    1. Можно включить вендоринг - тогда все зависимости будут размещены в подпапке vendor и при следующих сборках доступ в интернет не понадобится. go mod vendor
    2. Можно установить переменную GOPROXY так, чтобы исходники качались не через прокси proxy.golang.org, а через другой или напрямую с гитхаба. Environment variables
    3. Можно использовать уже скачанный локально репозиторий. replace directive in go.mod

    UPD: конкретно для go install можно попробовать п.2 с GOPROXY. Либо склонировать исходный репозиторий и собрать бинарник командой go build - для разрешения проблем с доступом к зависимостям воспользовавшись п. 1-3.

    UPD 2: по конкретно интересующему вас репозиторию: клонируете его, переходите в папку installer и выполняете в ней GO111MODULE=off go build, получите собранный бинарник - нет там никаких внешних зависимостей и даже go.mod
    Ответ написан
    1 комментарий