Это работает только с ключами формата PKCS#11. Если у вас ключ формата КриптоПро CSP (вы выбираете при входе «Ключ ЭП», а не «Рутокен ЭЦП 2.0 и 3.0»), то без КриптоПро не получится.
Да, для максимальной безопасности ваших закрытых ключей нужно генерировать ключи на Рутокен ЭЦП 2.0 2100, серт. ФСБ, используя библиотеку PKCS#11 (формат «как для ЕГАИС»), тогда они будут неизвлекаемыми и, действительно не покинут память токена. Их нельзя будет ни перехватить, ни скопировать.
…
Если на Рутокен из семейства ЭЦП будет сгенерированы пассивные ключи формата КриптоПро CSP, как на Рутокен Lite, они так же будут извлекаемыми. В ФНС проставляют запрет экспорта, который будет запрещать копирование штатными средствами.
Получал подпись в налоговой на Рутокен 3.0 в формате неизвлекаемого ключа PKCS#11.
Для этого формата ключа КрипоПро формально не нужен — по крайней мере, в личном кабинете ИП всё работает без установленного КриптоПро, нужно только рутокеновское ПО.
Но, например, Эльба пока не может работать без КриптоПро. Декларацию, созданную в утилите от ФНС, тоже без КриптоПро подписать не получится.
В четвертом тесте основные тормоза — это вроде как update. Если не делать одновременный update (в случае sqlite вроде бы так и рекомендуется, по крайне мере с настройками по-умолчанию), то работает в разы быстрее. Что-то типа:
var mu sync.Mutex
func routine(db *sql.DB, age, id int, ch chan<- string) {
if age%2 == 0 {
queryUpdate := fmt.Sprintf("UPDATE users SET salary = salary + 1 WHERE id = %d", id)
mu.Lock()
db.Exec(queryUpdate)
mu.Unlock()
Нормально. Есть соглашение, что при нарушении обратной совместимости мажорная версия пакета должна быть увеличена. Мажорные версии присутствуют в полном имени пакета как последний элемент (за исключением версий 0 и 1) — с т.з. тулинга это просто разные пакеты т.к. имена разные. Подробнее и точнее — go.dev/doc/modules/version-numbers
Вот, например, зависимости более-менее большого приложения — github.com/mattermost/mattermost-server/blob/master/go.mod
Не знаю, есть ли аналог такого приложения на C# (чтобы сравнить кол-во), но если пробежаться по зависимостям, то наверно что-то и окажется в стандарном .Net, но скорее всего в разы количество внешних пакетов не сократится.
В Go все пакеты распространяются в виде исходников — нет такой проблемы, что в репозитории один код, а в nuget/npm выложено что-то другое. Это же упрощает навигацию по внешним исходникам, их отладку и модификацию. Можно стандартным тулингом все внешние пакеты завендорить (все внешние исходники будут в папке vendor), провести их полный аудит, а затем при обновлении зависимостей проверять уже только диффы в папке vendor.
Нет, не яблоки с апельсинами, а только яблоки — «время». Не уверен, как оно для вас читается (секунда плюс 42 секунды?), но в данном конректном кейсе выглядит опечаткой как минимум — возможно вместо * ошибочно написан +.
Аналогичный тип для «массы» выглядел бы примерно так:
type Mass int64
const (
Milligram Mass = 1
Gram = 1000 * Milligram
Kilogram = 1000 * Gram
)
var mass = Gram + 42
В данном случае 42 — это не апельсины, а 42 наносекунды (те же яблоки). Вышеупомянутый линтер durationcheck наверно можно доработать так, чтобы он ловил такое использование констант без явного указания «единицы времени», т.е вместо
var duration time.Duration = 100
time.Sleep(300)
time.Sleep(time.Second + 42)
// A Duration represents the elapsed time between two instants
// as an int64 nanosecond count. The representation limits the
// largest representable duration to approximately 290 years.
type Duration int64
Ваш пример конечно компилируется, но компилятор можно/нужно дополнять линтерами. Например, golangci-lint покажет сообщение от линтера durationcheck:
Multiplication of durations: `time.Second * time.Second` (durationcheck)
time.Sleep(time.Second * time.Second)
В довольно старом обсуждении Upwork и ПСН можно ли (again)? по каким-то моментам так и к однозначному мнению не пришли. Например, как доказывать налоговой при возможной проверке, что деятельность соответствует патенту.
Вроде как пишут, что на УСН 6% меньше вопросов как от налоговой (платится 6% от всего дохода ну и ладно) и от банка (не срабатывает триггер, что налоги не платятся или платятся слишком мало).
Куда как больше «гимороя» с закрывающими документами по выполненным работам, договорами и т.д… Которые, сюрприз, на самозанятости нужны не меньше, хотя очень многие на это забивают и потом изрядно удивляются последствиям.
Проясните пожалуйста для варианта самозанятость/Upwork (иностранные клиенты) — никаких документов в этой варианте вроде не нужно и никто не требует.
По патенту, насколько я в курсе, могут быть ньюансы с местом ведения деятельности (в случае того же Upwork) и налогами/отчетностью на неосновной доход (проценты по вкладу ИП?), которые могут попать под ОСН, если до перехода на патент не подать заявление на УСН.
Если вы добавите return где-то в середине функции или случится panic, то код в defer всё равно отработает
В другом языке можно было бы использовать try/finally — по сравнению с defer код «очистки» находится далеко от кода «создания», а также добавляется дополнительный (дополнительные) уровень вложенности
Дженерики выйдут в версии Go 1.18 в феврале 2022 г. В ветке master они уже доступны, можно их попробовать, используя gotip: pkg.go.dev/golang.org/dl/gotip
Пока что generic-функции для работы со slices и maps будут доступны как экспериментальные (чтобы обкатать их), но потом их перенесут в стандартную библиотеку: slices.go maps.go
Там есть ссылки — одна на Рутокен Плагин, вторая на браузерное расширение Адаптер Рутокен Плагин (в зависимости от браузера)
Для Linux еще наверно нужны шаги отсюда, точно сейчас не помню: Рутокен ЭЦП в операционных системах GNU/Linux
Для этого формата ключа КрипоПро формально не нужен — по крайней мере, в личном кабинете ИП всё работает без установленного КриптоПро, нужно только рутокеновское ПО.
Но, например, Эльба пока не может работать без КриптоПро. Декларацию, созданную в утилите от ФНС, тоже без КриптоПро подписать не получится.
Эксперимент по безвозмездному предоставлению пользователям Удостоверяющего центра ФНС России
программного обеспечения для работы с электронной подписью вроде как закончился 28.10.2022, но я получал подпись в конце ноября и вшитая ограниченная лицензия на КрипоПро всё еще присутствует.
Не знаю, есть ли аналог такого приложения на C# (чтобы сравнить кол-во), но если пробежаться по зависимостям, то наверно что-то и окажется в стандарном .Net, но скорее всего в разы количество внешних пакетов не сократится.
В Go все пакеты распространяются в виде исходников — нет такой проблемы, что в репозитории один код, а в nuget/npm выложено что-то другое. Это же упрощает навигацию по внешним исходникам, их отладку и модификацию. Можно стандартным тулингом все внешние пакеты завендорить (все внешние исходники будут в папке vendor), провести их полный аудит, а затем при обновлении зависимостей проверять уже только диффы в папке vendor.
Пожалуйста, про гошников поконкретнее.
*ошибочно написан+.Аналогичный тип для «массы» выглядел бы примерно так:
durationcheckdurationcheckнаверно можно доработать так, чтобы он ловил такое использование констант без явного указания «единицы времени», т.е вместонадо было бы явно писать
Durationэто всего лишьint64:Ваш пример конечно компилируется, но компилятор можно/нужно дополнять линтерами. Например,
golangci-lintпокажет сообщение от линтераdurationcheck:time.Duration:В довольно старом обсуждении Upwork и ПСН можно ли (again)? по каким-то моментам так и к однозначному мнению не пришли. Например, как доказывать налоговой при возможной проверке, что деятельность соответствует патенту.
Вроде как пишут, что на УСН 6% меньше вопросов как от налоговой (платится 6% от всего дохода ну и ладно) и от банка (не срабатывает триггер, что налоги не платятся или платятся слишком мало).
Проясните пожалуйста для варианта самозанятость/Upwork (иностранные клиенты) — никаких документов в этой варианте вроде не нужно и никто не требует.
По патенту, насколько я в курсе, могут быть ньюансы с местом ведения деятельности (в случае того же Upwork) и налогами/отчетностью на неосновной доход (проценты по вкладу ИП?), которые могут попать под ОСН, если до перехода на патент не подать заявление на УСН.
deferсрабатывают в обратном порядкеreturnгде-то в середине функции или случитсяpanic, то код вdeferвсё равно отработаетtry/finally— по сравнению сdeferкод «очистки» находится далеко от кода «создания», а также добавляется дополнительный (дополнительные) уровень вложенности1. Работа с
clientsне потокобезопасна.2. Закрытие соединения и удаление из
clients— использоватьdefer:pkg.go.dev/golang.org/dl/gotip
Пока что generic-функции для работы со slices и maps будут доступны как экспериментальные (чтобы обкатать их), но потом их перенесут в стандартную библиотеку:
slices.go
maps.go