Задать вопрос
  • Как лучше реализовать транзакцию?

    yellow79
    @yellow79
    Senior Software Engineer
    В целом всё выглядит не плохо, но будет лучше, если контекст будем принимать на вход. Так же было не плохо отменять транзакцию в случае ошибки, ну и закрывать prepare тоже не помешает. На каждую итерацию цикла вовсе не обязательно содавать свой собственный prepare, достаточно одного

    func (db *Requests) StorePhotos(ctx context.Context, photos []Photo) error {
    	ctx, cancel := context.WithTimeout(ctx, time.Minute*2)
    	defer cancel()
    
    	tx, err := db.BeginTx(ctx, nil)
    	if err != nil {
    		return err
    	}
    	defer tx.Rollback()
    
    	stmnt, err := tx.PrepareContext(ctx, "INSERT INTO photos (id, owner_id, req_id, url) VALUES ($1, $2, $3, $4)")
    	if err != nil {
    		return err
    	}
    	defer stmnt.Close()
    
    	for _, photo := range photos {
    		if _, err = stmnt.ExecContext(ctx, photo.ID, photo.OwnerID, photo.ReqID, photo.URL); err != nil {
    			return err
    		}
    	}
    
    	return tx.Commit()
    }
    Ответ написан
    5 комментариев
  • Какие есть подходы для стабилизации потребляемой памяти в го-приложении?

    Lynn
    @Lynn
    nginx, js, css
    Что бы потреблять меньше памяти надо потреблять меньше памяти.

    Поскольку в вопросе никакой конкретики нет, то вот вам общие соображения:

    Например если у вас запросили 1000 элементов, то не вычитывать из базы всю 1000, а прочитать 10, отправить часть ответа, прочитать следующие 10 и так далее.

    Второй подход, ограничить одновременные «тяжёлые» запросы — если вы уже обрабатываете «тяжёлый» запрос, то второй такой запрос надо поставить в очередь и начать обрабатывать только после завершения первого.
    Ответ написан
    Комментировать
  • Насколько процесс разработки на Go похож на разработку под Java/C#?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    Язык простой с мощной моделью утилизации ресурсов:
    • испольузется дял всяких молотилок
    • всяких небольших функциональностей
    • для нагруженных серверов
    • в общем случае отличается от Java/C#, тк не удобно разрабатывать бизнес-логику, слишком прост и очень накладно выходит писать таковую
    • утилитарные штуки всякие пишут и узкие места за счет простоты
    Ответ написан
    3 комментария
  • Структура проекта на Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Добрый день.

    Это попытка стандартизировать структуру проекта (многие ориентируются на неё)
    https://github.com/golang-standards/project-layout

    Go-Kit - очень грамотная структура, очень
    https://github.com/go-kit/kit

    И обязательно стоит посмотреть
    https://12factor.net/ru/

    Что касается "Т.е. в одном файле может быть сразу модель, сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?" - то это не совсем так, в одном пакете (папке) может быть и модель, и сервис, и репозиторий". Например вот так:
    yourpackage/service.go
    yourpackage/repo.go
    yourpackage/model.go
    И это всё будет доступно в рамках пакета.

    Лично я использую такую схему:
    cmd/ - команды исполняемого файла
    conf/ - конфиги приложения (env файлы)
    init/ - конфиги logrotated, nginx, systemd и т.д.
    pkg/ - публичные пакеты
    pkg/packagename/ - тут определяются интерфейсы (сервиса, репозитория и т.д.) в разных файлах
    pkg/packagename/endpoints/http - endpoint'ы для HTTP
    pkg/packagename/repo/mysql - реализация репозитория на MySQL
    pkg/packagename/repo/gorm - реализация репозитория на GORM (для примера)
    pkg/packagename/service/ реализация сервиса

    Я написал очень кратко, если что-то не понятно или есть вопросы - пишите, я опишу подробнее
    Ответ написан
    3 комментария
  • Как можно измерить производительность http сервера?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Для подобного тестового кода можно использовать ab (Apache HTTP server benchmarking tool)

    Например так
    ab -n 10000 -c 1000 http://localhost:8080/

    Где:
    -n это количество запросов, которое нужно сделать
    -с это количество одновременных запросов

    Запустил у себя на одном из серверов, результат вот такой
    Server Software:
    Server Hostname:        localhost
    Server Port:            8080
    
    Document Path:          /
    Document Length:        5 bytes
    
    Concurrency Level:      1000
    Time taken for tests:   0.509 seconds
    Complete requests:      10000
    Failed requests:        0
    Write errors:           0
    Total transferred:      1210000 bytes
    HTML transferred:       50000 bytes
    Requests per second:    19627.39 [#/sec] (mean)
    Time per request:       50.949 [ms] (mean)
    Time per request:       0.051 [ms] (mean, across all concurrent requests)
    Transfer rate:          2319.25 [Kbytes/sec] received

    Т.е. при 1000 одновременных запросов сервер сможет обрабатывать в среднем 19627 запросов в секунду

    Но важно понимать, что в реальном проекте у вас будет не один endpoint, и что каждый endpoint, в зависимости от того, что он будет делать - будет показывать разный RPS.

    Например если сейчас вы добавите еще один endpoint и будете делать запросы в базу для формирования ответа - RPS будет значительно меньше.
    Ответ написан
  • Какой язык изучать для программирования микроконтроллеров?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Если серьезно углубляться - то C/C++, Assembler
    JS/Python в контексте разработки для микроконтроллеров - чисто поиграться...
    Ответ написан
    Комментировать
  • На каком я сейчас уровне?

    1. Не умеешь пользоваться гитом, тк загрузил файлы через Upload
    2. Код невозможно проверить, тк ты закинул только cs файлы, но не приложил не менее важный csproj - не разбираешься, как собирается проект.
    3. Про свич кейс тебе уже сказали в комменте.
    Про остальное мало что можно сказать - код самый обычный, на три с минусом, не очень хороший, но и не слишком ужасный.
    С архитектурой плохо, тк детали реализации смешаны с бизнес-правилами.
    По алгоритмам нельзя оценить, тк никаких сложных алгоритмов в твоём проекте нет.

    Уровень, имхо: стажёр/младший разработчик(обязательно под менторством и наблюдением более опытного)
    Ответ написан
    5 комментариев
  • Почему, при выносе пула соединений на уровень файла, паникует?

    @deliro
    Ну не фигня ли?? )

    Нет, ведь у тебя две разных переменные с одним именем — db

    Очень удобное правило

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


    Да и вообще, никогда не создавай глобальных переменных. В продуктовом коде они не нужны в 100% случаев
    Ответ написан
    9 комментариев
  • Почему у более дорогих процессоров память 1 и 2 уровня ниже?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Приписку "на ядро" во втором столбике тоже надо учитывать. Если на нее умножить, все становится на свои места.
    Ответ написан
    Комментировать
  • Почему выдает ошибку - переменная input объявлена, но не используется?

    @deliro
    Ну потому что она объявлена и потому что она не используется, очевидно же.

    Вот это убери
    var input string // переменная используется в блоке for
    Ответ написан
    9 комментариев
  • Динамическое получение скорости работы процессора?

    gbg
    @gbg Куратор тега Windows
    Любые ответы на любые вопросы
    Вадим Ушаков, Понимаете, ваш вопрос в определенном смысле абсурден, потому что вы хотите дословно "измерить неизвестно что неизвестно как".

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

    Но частота процессора хоть и кореллирует с тем как быстро он выполняет инструкции, но жестко с этим не связана. Потому что скорость выполения определенной программы определенным процессором зависит о от частоты, и от самой программы - можно умножение матриц написать как в MKL, с выравниванием кэша и интрисинками, а можно не написать и получить падение скорости раз так в 40, если не больше.

    Это если речь идет о вычислениях. Но числодробилки нынче - редкость, больше распространены приложения, привязанные к IO - а там процессор может молотить во все свои гигагерцы - если поток спит и ждет данные, но будет продолжать это делать, пусть и с огромной тактовой частотой.
    Ответ написан
    2 комментария
  • Как правильно назвать обновленный запрос в бэкенде?

    Правильно назвать его, например, /api/v2/product/search/, чтобы у вас уже была встроенная схема версионирования и в будущем вы над этим не думали.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Добавлю к пессимизму.
    Верно ли это утверждение? 59 минут назад
    Сломался WordPress Кто поможет? 14 окт.
    Почему так произошло Опенкарт? 06 июл.
    Стоит ли учить Python по книгам? более года назад
    Как двигаться в гейм дев? более года назад
    Как начать путь в сферу game дизайна? более года назад
    Не получается верстать самостоятельно. Как преодолеть это? более года назад


    Этот список говорит нам открытым текстом, что увлекаетесь вы не программированием, а "вайти".
    Ой, геймдев! Ой нет, Питон! А, нет - вёрстка! Ну и понятное дело что всё кончилось вордпрессом.

    Люди, которые действительно увлекаются программированием, не задают вопросов, "стоит ли учиться по книгам". и "как войти вайти". Они учатся. И входят.

    Есть очень большая вероятность, что программирование - это не ваше призвание. А интересуетесь вы им только из-за хайпа. В этом нет ничего плохого. Надо просто найти дело, к которому действительно лежит душа.
    Ответ написан
    2 комментария
  • Верно ли это утверждение?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не раскрыто понятие "успешный программист" и его связь с любопытством. Так что это утверждение - чушь. Программист - это человек, который умеете переводить конкретную задачу в конкретный код. Что именно при этом делает "компьютер" достаточно понимать в общих чертах, потому что слишком много технологий, который вообще соединяются для того, чтобы ваш код выполнился. Электричество, полупроводники, вот это всё? Поэтому понятие "любопытство" в таких вещах может быть даже вредно, этим занимаются учёные в компаниях. Если для вас программирование вновинку, то вам в первую очередь надо научиться ставить чёткие задачи и учится достигать ими задуманного результата.

    Программирование происходит в голове, а не на компьютере.
    Ответ написан
    1 комментарий
  • Inline svg как фавикон для страницы, это возможно?

    RAFAILgaley
    @RAFAILgaley
    я так делаю - работает

    сам вставь строку и проверь - пять сек же на это надо
    Ответ написан
    3 комментария
  • Компиляция .NET 7 в нативный код?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Но зачем? как выше уже отметили можно запаковать в отдельный файл, не совсем уверен, но можно ngen ом обработать сборки для привязки к определенной машине.

    Единственный кейс это мелкие утилиты с размером > 30 мб но как то уж не знаю.

    По скорости C#, Java, GO примерно одинаковы. А числодробилки пишутся на С и предоставляют враперы
    Ответ написан
    1 комментарий
  • Компиляция .NET 7 в нативный код?

    .NET 7 ещё не вышел. Планируется на следующий год.
    На данный момент есть только R2R + Assembly Trimming + Single file + Self contained + PGO что даёт в целом схожий с golang экспириенс

    UPD: вот тут можно следить за прогрессом NativeAOT https://github.com/dotnet/runtime/issues/61231
    Ответ написан
    Комментировать
  • Как изменить ширину input в таблице?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    5 комментариев
  • Язык программирования D. Почему отличный язык остался невостребованным?

    Почему отличный язык остался невостребованным?

    Недостаток маркетинга и поддержки со стороны больших компаний.
    По той же причине Ruby почти умер, например)

    Rust - очень активно поддерживался мозиллой, а потом и другими компаниями. Сейчас у него очень сильное коммьюнити
    Go - очень активно пиарил гугл. Сейчас тоже очень сильное коммьюнити
    У D этого нет (по ощущениям - коммьюнити состоит только из энтузиастов)
    Ответ написан
    4 комментария