Задать вопрос
  • Как предотвратить одновременное открытие программы на golang?

    package main
    
    import (
    	"bytes"
    	"fmt"
    	"os"
    	"os/exec"
    	"runtime"
    	"strings"
    )
    
    func main() {
    	result, err := isProgrammRunning()
    	if err != nil {
    		fmt.Println(err)
    		os.Exit(1)
    	}
    	if result {
    		fmt.Println("Process is running - exit")
    		os.Exit(1)
    	}
    
    	// Code
    }
    
    func isProgrammRunning() (bool, error) {
    	name := os.Args[0]
    	if runtime.GOOS == "windows" {
    		cmd := exec.Command("tasklist.exe", "/fo", "csv", "/nh")
    		nameSplit := strings.Split(name, "\\")
    		name = nameSplit[len(nameSplit)-1]
    		out, err := cmd.Output()
    		if err != nil {
    			return false, err
    		}
    		name = "\"" + name + "\""
    		if bytes.Index(out, []byte(name)) != -1 && bytes.Index(out, []byte(name)) != bytes.LastIndex(out, []byte(name)) {
    			return true, nil
    		}
    	} else {
    		cmd := exec.Command("ps", "aco", "command")
    		nameSplit := strings.Split(name, "/")
    		name = nameSplit[len(nameSplit)-1]
    		out, err := cmd.Output()
    		if err != nil {
    			return false, err
    		}
    		str := strings.Split(string(out), "\n")
    		count := 0
    		for _, item := range str {
    			if name == item {
    				count++
    			}
    			if count == 2 {
    				return true, nil
    			}
    		}
    	}
    	return false, nil
    }
    Ответ написан
    Комментировать
  • Как создать изображение и изменить цвет определённого пикселя используя Golang?

    Пример по работе со стандартным пакетом image
    https://golang.org/pkg/image/#example_
    Ответ написан
    Комментировать
  • Есть ли в Golang поддержка MySQL?

    rammtw
    @rammtw
    Press CTRL+S to save project
    Есть. Нужно импортировать стандартный пакет "database/sql"
    и дополнительно драйвер import _ "github.com/go-sql-driver/mysql"
    Ответ написан
    4 комментария
  • Соответствует ли данный код хорошим практикам?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вам больше стоит обеспокоиться тем, что вы запросы формируете интерполяцией строк.
    Ответ написан
    1 комментарий
  • Какой стек выбрать для бэкэнда?

    @dimuska139
    Backend developer
    Важна производительность, поэтому и стал вопрос о переходе от PHP/Laravel

    Тут вообще нет связи. Узким горлышком в таких проектах является не язык, на котором приложение написано, а база данных. Если медленно выполняются запросы, то хоть на ассемблере бэкенд напиши - быстрее сервер отвечать не будет. Ну может пару миллисекунд выиграете, но на фоне времени выполнения запроса в БД и сетевых издержек это смешные цифры - даже не заметите разницу. А если речь идёт о Django, то это вообще не про производительность, потому что этот фреймворк довольно тяжёлый сам по себе, да и Python - это далеко не самый производительный язык даже среди скриптовых.

    Если речь идёт про большие нагрузки, то тоже язык тут не особо при делах, потому что обеспечиваются они масштабированием, кешированием и оптимизацией запросов к БД. Язык приложения тут вообще не при чём - разве что памяти какой-то больше жрёт, какой-то меньше. 200к в сутки - это в среднем всего лишь 2-3 запроса в секунду - то есть вообще ни о чём. Понятно, что распределение посещаемости вряд ли непрерывное равномерное, но тем не менее 200к даже если за один час - это всего лишь 140 запросов в секунду. С такой нагрузкой справится любой современный язык и фреймворк даже без масштабирования, кстати.
    Ответ написан
    1 комментарий
  • Git pull что от меня хочет?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    % git pull                                      
    У текущей ветки нет информации об отслеживании.
    Пожалуйста, укажите с какой веткой вы хотите слить изменения.
    Для дополнительной информации, смотрите git-pull(1).
    
        git pull <внешний-репозиторий> <внешняя-ветка>
    
    Если вы хотите указать информацию о отслеживаемой ветке, выполните:
    
        git branch --set-upstream-to=<внешний-репозиторий>/<внешняя-ветка> <локальная-ветка>

    Похоже ты добавил remote с именем MyBot, но забыл связать текущую ветку master с какой-либо вышестоящей.
    Поэтому Git не знает откуда скачивать и просит тебя указать откуда конкретно ты хочешь загрузить коммиты.

    Например так:
    # скачать ветку master из внешнего репозитория MyBot и слить с текущей локальной веткой
    git pull MyBot master

    Либо привязать к текущей ветке вышестоящую чтобы заработал pull без параметров:
    # связать локальную ветку master c внешней веткой master
    git branch --set-upstream-to=MyBot/master master
    Ответ написан
  • Как сделать такую таблицу на html?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Комментировать
  • Как из Golang открывать и закрывать другие приложения/сервисы?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://golang.org/pkg/syscall/ смотрите все системные вызовы во всех языках похожи, вам по сути нужновызвать список процессов отфильтровать их и послать сигнал принять ислам. Впрочем если вы сами их запускаете то pid у вас уже будет. Тут же есть функции для определения загрузки процессора и прочего
    Ответ написан
    Комментировать
  • Как запустить web страницу на Golang из под Docker?

    Судя по коду, вы слушаете порт 9098 на локалхосте.
    log.Fatal(http.ListenAndServe("127.0.0.1:9098", r))


    При этом, перенаправляете докером вы на порт 8080.
    ports:
          - "9097:8080"

    1. Слушать надо не на локалхосте, на локалхост докер не сможет перенаправить порт
    2. Поправить порты на правильные.

    Вот так должно сработать, если все остальное верно.
    log.Fatal(http.ListenAndServe(":8080", r))
    Ответ написан
    5 комментариев
  • В чем плюсы и минусы между Манго Офис и Ростелеком телефония?

    @Drno
    Никогда! Никогда!!!! если есть возможность, не работайте с ростелекомом. в случае тех проблем задолбаетесь с ними разбираться
    Манго неплохо, но разрослась сильно, местами дорого стало)

    Плюс IP телефонии в том, что Вы можете выбрать вообще любого провайдера. Из любой точки мира. Смотрите, выбирайте, сравнивайте.
    Ответ написан
    4 комментария
  • Как при наведении на первый элемент скрыть последний?

    0xD34F
    @0xD34F Куратор тега CSS
    li:first-child:hover ~ li:last-child {
      display: none;
    }
    Ответ написан
    1 комментарий
  • Как убрать проверку импортированных модулей go с официальным расширением?

    2ord
    @2ord
    Начиная с версии 1.11, используются Go modules.
    При этом нет необходимости использовать ни GOROOT, ни GOPATH.
    Для удовлетворения зависимостей предпочитаю использовать go mod tidy.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    @danSamara
    У вас IO-bound задача, а это значит:
    1. Вам нужно асинхронное решение, которое позволит избавится от времени ожидание IO операций в основном цикле программы.
    2. Необходимо знать максимальное время обработки ответа (назовём его response_processing_time).
    3. Необходимо знать минимальное время запроса (timeout) - время, в течении которого удалённый сервер не оборвёт связь (пусть будет request_time_out).

    Последние два параметра связаны: response_processing_time > request_time_out * количество_запросов. То есть, если вы обрабатываете ответ сервера за 1мс или, другими словами обрабатываете 1000 запросов в секунду, это значит, что для тысячи запросов время соединения не должно быть меньше секунды. Для 5000 одновременных запросов - 5 секунд соответственно.
    Это ограничение фундаментально и обойти его не получиться - можно только оптимизировать: или железом - задействовать дополнительные ядра процессора и/или программно - уменьшением времени обработки запроса.
    Очевидно, что эти расчёты верны только для постоянного потока запросов, если у вас возможны паузы между запросами, то их надо вносить как поправочные коэффициенты.

    Касательно сути вопроса - на чём лучше делать, я бы рекомендовал Go - идеальный язык для всяких сетевых штук, можно сказать, это его родная стихия. Тем более, что задача простая и её реализация не должна занять много времени даже для человека, который никогда с GoLang дела не имел.
    Ответ написан
    Комментировать
  • В go нету встроенного reverse метода для массива?

    Такого метода нет, потому что в языке пока нет дженериков. Где-то в феврале следующего года обещают дженерики завезти с версией go 1.18. А пока что пишем сами.
    Го это очень простой язык, но эта простота имеет свою цену.

    Поясняю, го это строго статически типизированный язык, в отличие от джаваскрипта, который является динамически типизированным. Поэтому чтобы сделать такую функцию, пришлось бы писать ее реализацию для всех возможных типов, а это невозможно. Да, можно покрыть все типы стандартной библиотеки, но это не покроет типы, которые сам пользователь может создать.
    Поэтому будет такая штука как дженерики (обобщения), это когда можешь написать функцию, которая работает со слайсом любого типа. И ей важно будет только то, что это слайс, она сможет переместить там элементы, не заглядывая в их тип.
    Ответ написан
    2 комментария
  • Удалённая работа Front-end разработчиком в 17 лет. Что нужно уметь и возможно ли устроиться?

    @AVKor
    Возможно ли в 17 устроиться на удалёнку

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

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    renpy тебе позволяет использовать питон для написания новеллы. Но на этом всё. Больше плюсов нет, только проблемы. Питон - скриптовый язык, что тянет за собой кучу проблем, например, нормальную дистрибьюцию софта другим людям.
    Так что изучай C# и Unity
    Ответ написан
    6 комментариев
  • Что делать, если зарубежный работодатель кинет на зарплату (работа в сфере IT)?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Я вас расстрою, но это риск, который просто придётся принять. Для ИПшника шанс выиграть суд у западной компании, не имеющей представительства в РФ, исчезающе мал.
    Ответ написан
    Комментировать
  • Как заставить программу использовать CPU только по мере небходимости?

    hint000
    @hint000
    у админа три руки
    Как он, например, узнаёт, нажата ли кнопка? Для этого надо выполнять цикл как можно чаще
    Как вы узнаёте утром, что надо просыпаться и идти на работу или в школу? Для этого надо всю ночь смотреть на часы как можно чаще. :)
    А можно просто "сказать" будильнику (или родственникам), чтобы разбудили в нужное время. Вот так и программа доверяет операционной системе "разбудить" её, когда кто-то нажмёт на кнопку. А пока никто не нажал, программа спит и не тратит ресурсы.
    Операционная система в любом случае знает обо всех нажатиях кнопок и обо всех движениях мыши, она решает, какой программе передать эти нажатия или движения, т.е. какую программу нужно разбудить сейчас. Как только программа обработает событие, она снова уснёт, если больше нечего обрабатывать.
    Ответ написан
    Комментировать
  • Как спарсить наклейки на предмете стим?

    Vindicar
    @Vindicar
    RTFM!
    Так же, как и всегда. Стим кучу инфы подгружает фоновым запросом.
    В инструментах разработчика в браузере смотришь XHR-запросы, которые делает страница.
    Ищешь запрос, которые содержит инфу о предметах.
    Разбираешься с его параметрами и содержимым, экспериментируешь. Скорее всего в параметрах будут какие-то ID инвентаря и указатель на то, сколько предметов пропускать (пагинация). Содержимое вроде у них JSON, который тривиально парсится одноименным модулем питона.
    А потом просто делаешь этот запрос, меняя параметры.
    Ответ написан
    1 комментарий