• Что означает запись [4]byte в языке Go?

    @calculator212
    а как понять, то что перед типом указано - [4] ?
    В го конкретно в данном случае это будет частью типа, по сути это означает, что массив (именно массив а не слайс) - это отдельный тип, который представляет из себя последовательность из 4 элементов.
    Массив считается отдельным типом сам по себе, т.е. [4]byte, [3]byte, []byte это три разных типа.
    Ответ написан
    1 комментарий
  • Что по операционным системам лучше подтянуть Go разработчику?

    @rPman
    Так как вопрос общий и не конкретизирует будущую работу и выбор ОС, то настоятельно рекомендую почитать про сети и типовые конфигурации, с ними больше всего работы и она универсальна, для любой ОС.

    Следующий кандидат на изучение IPC (Inter Process Communication), мультипоточность, синхронизация, семафоры, мьютексы и т.п. Можно полистать про пайпы, они по разному работают в разных ОС т в каком то смысле это одновременно и сети и IPC.

    До кучи - работа со временем, не совсем ОС но она чуть чуть может отличаться от ОС или выбранного фреймворка.

    Ну и совсем голая практика - работа с GUI, базовые отличия и особенности (например почему в linux GUI это сервер, или почему в windows, 'схватив' заголовок окна мышкой, можно поставить на паузу стартовый поток).

    Судя по вопросам да и вообще, очень многим не хватает базовых знаний в этой области, применимость, конкретной практики. Какой только маразм не изобретают...
    Ответ написан
    Комментировать
  • Отключение устройства при попадании воды?

    Ocelot
    @Ocelot
    12В не считается опасным для человека, но защита лишней не будет. Можно по сигналу с датчика закрывать мосфет в цепи питания. Но под напряжением останется всё до этого мосфета, и есть вероятность, что он откроется снова через утечку на затвор через воду.

    Если хотите упороться по безопасности, поставьте управляемый предохранитель (triggerable fuse, self-control fuse, https://www.eaton.com.cn/cn/en-us/catalog/electron...). В идеале он должен находиться прямо в аккумуляторной сборке.
    Ответ написан
    Комментировать
  • Как в VS Code, быстро создать HTML шаблон?

    @inzor Автор вопроса
    ! и затем нажать enter, или ! и затем мышкой выбрать вариант emmet. Так получилось.
    Ответ написан
    1 комментарий
  • Как на GO из консоли считать нажатие стрелок на клавиатуре?

    В Go можно использовать пакет "github.com/eiannone/keyboard" для считывания нажатий клавиш с клавиатуры, включая стрелки. Пакет keyboard позволяет легко обрабатывать события нажатия и отпускания клавиш и читать нажатые клавиши с помощью функций-обратных вызовов.

    Вот пример кода, который считывает нажатие стрелок с клавиатуры:
    Код

    package main
    
    import (
        "fmt"
        "os"
    
        "github.com/eiannone/keyboard"
    )
    
    func main() {
        // Инициализация пакета клавиатуры
        if err := keyboard.Open(); err != nil {
            panic(err)
        }
        defer func() {
            _ = keyboard.Close()
        }()
    
        fmt.Println("Нажмите стрелку влево, стрелку вправо или Esc для выхода...")
    
        for {
            char, key, err := keyboard.GetKey()
            if err != nil {
                panic(err)
            }
    
            if key == keyboard.KeyArrowLeft {
                fmt.Println("Стрелка влево нажата")
            } else if key == keyboard.KeyArrowRight {
                fmt.Println("Стрелка вправо нажата")
            } else if key == keyboard.KeyEsc {
                fmt.Println("Выход")
                break
            }
    
            if char == 'q' || char == 'Q' {
                fmt.Println("Выход")
                break
            }
        }
    }



    Этот код открывает консоль и ждет нажатия стрелки влево, стрелки вправо или клавиши "Esc" для выхода. Когда нажата соответствующая клавиша, выводится соответствующее сообщение, и программа продолжает ожидать новых нажатий клавиш. Если нажата клавиша "q" или "Q", программа также завершается.

    На MacOS можно использовать пакет "github.com/nsf/termbox-go" для считывания нажатий клавиш с консоли, включая стрелки. Этот пакет предоставляет набор функций для работы с терминалом, включая считывание нажатых клавиш.

    Код

    package main
    
    import (
    	"fmt"
    	"log"
    	"os"
    
    	"github.com/nsf/termbox-go"
    )
    
    func main() {
    	err := termbox.Init()
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer termbox.Close()
    
    	fmt.Println("Нажмите стрелку влево, стрелку вправо или Esc для выхода...")
    
    	for {
    		switch ev := termbox.PollEvent(); ev.Type {
    		case termbox.EventKey:
    			switch ev.Key {
    			case termbox.KeyArrowLeft:
    				fmt.Println("Стрелка влево нажата")
    			case termbox.KeyArrowRight:
    				fmt.Println("Стрелка вправо нажата")
    			case termbox.KeyEsc:
    				fmt.Println("Выход")
    				os.Exit(0)
    			}
    		}
    	}
    }



    Этот код использует пакет termbox-go для инициализации терминала и считывания событий клавиш. В цикле он ожидает нажатия стрелки влево, стрелки вправо или клавиши "Esc". Когда нажата соответствующая клавиша, выводится соответствующее сообщение. Если нажата клавиша "Esc", программа завершается с кодом выхода 0.
    Ответ написан
    2 комментария
  • Почему структура Golang работает не корректно при подключение в другом файле?

    includedlibrary
    @includedlibrary
    Потому что это приватное поле. Приватные поля начинаются с маленькой буквы, публичные - с большой. В рамках пакета вы можете обращаться к приватным полям структур этого пакета, но в других пакетах не можете этого делать
    Ответ написан
    Комментировать
  • При установке "pip install pyinstaller" выдает ошибку. Что делать?

    @maximsemin23
    Напиши pip install wheel, а потом уже pip install pyinstaller
    Ответ написан
    Комментировать
  • Почему меняется работа RWMutex в зависимости от его расположения в коде?

    @Wirusnyy-chel
    У вас в обоих случаях mutex защищает только от одновременной записи и чтения из переменной. Фактически порядок вывода не зависит от этого мьютекса, можете убедиться в этом если запустите исполнение несколько раз или добавите разные слипы в горутинах чтения и записи.

    Если необходимо синхронизировать потоки записи и чтения лучше использовать каналы.

    Как упражнение на mutex могу предложить следующее:
    Задать структуру с двумя переменными: где значение первой переменной зависит от второй. Если параллельно обновлять и читать значения можно увидеть следующее:
    Без мьютекса чтение может иногда возвращать несогласованное значение между переменными.
    С мьютексом значение при чтении будет всегда согласованным.

    P.S. В вашем примере для синхронизации переменных достаточно обычного мьютекса. RWMutex будет полезен если читателей больше одного.
    Ответ написан
    4 комментария
  • Есть ли курсы по Go наподобие JavaRush?

    @nakem
    gotour https://go.dev/tour/welcome/1
    Это обязательно для прохождения
    Ответ написан
    Комментировать
  • В чём разница между fmt.Scan и fmt.Scanln, между fmt.Print и fmt.Println?

    @igor6130
    ln означает "добавить в конец строки символ перехода на новую".
    Ответ написан
    Комментировать
  • Для чего в go.mod добовить зависимости если мы указываем полный путь к ним в коде?

    Для указания версий этих зависимостей. Чтобы бралась не последняя версия, а указанная. Обеспечивает повторяемость релизов и стабильность.
    Ответ написан
    Комментировать
  • Как в golang заменить текст в консоли?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Для этого существуют управляющие символы.
    Вот тут описание: https://gist.github.com/fnky/458719343aabd01cfb17a...
    Обновление данных одной строки легко сделать вручную через \x1B[K (ESC + erase line), но есть и готовые модули: https://github.com/gosuri/uilive или даже https://github.com/c-bata/go-prompt
    Ответ написан
    1 комментарий
  • Какую операционную систему поставить?

    @Drno
    идешь на сайт производителя ноутбука, ищешь свой ноутбук
    смотришь есть ли там драйвера под винду, если да - ставь
    Ответ написан
    3 комментария
  • Как правильно настроить nginx для сервера написанного на go?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    Могу посоветовать перейти на caddy вместо nginx. Он очень сильно проще и множество вещей включены по умолчанию сразу. Как пример он сам будет получать сертификаты и обновлять их, может и самоподписанный сертификат гонять самже. По умолчанию сразу пробрасываются все хедеры вебсокеты и прочее. В общем оно очень простое и удобное при этом мощное.
    Как пример, все с чем вы мучаетесь выше в реалиях caddy выглядит так.
    golanghelloworld.hackersandslackers.app {
    	reverse_proxy 127.0.0.1:3002
    }


    Дополнительное могу порекомендовать не использовать имя localhost а использовать напрямую 127.0.0.1.
    В коде вообще лучше слушать на всех интерфейсах, т.е. использовать такую запись
    http.ListenAndServe(":3002", nil)
    Ответ написан
    2 комментария
  • Как из HTML передать массив в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    value текстового поля ввода это просто строка текста, что бы там ни вводили.

    Я бы не ждал от пользователя знания синтаксиса JSON массивов JavaScript со всеми этими квадратными скобками, и позволил вводить числа через запятую и, может, ещё пробел.

    Строку текста можно разбить в массив методом split():
    const str = '1,2, 3,   4'; // то, что забрали из value инпута
    const separator = /,\s*/; // рег. выражение: запятая и потом 0 или больше пробелов
    const arr = str.split(separator); // [ "1", "2", "3", "4" ]
    тут ешё один подвох: элементы массива по-прежнему строки. Не число 1, а строка "1".

    Перевести элементы массива в числа можно, например, функцией Number(). Нужно каждый элемент получившегося массива прогнать через эту функцию. Для этого есть метод массива map():
    const arr = str
      .split(separator)
      .map(Number); // [ 1, 2, 3, 4 ]
    вот теперь больше похоже на желаемый, наверное, результат?
    Ответ написан
    1 комментарий
  • Есть ли смысл писать на go под мобильные платформы?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Я пишу бэк на Go/NodeJs, а сами мобильные приложения на Java/Kotlin.
    Тебе надо определиться, что ты хочешь - писать бэк или мобилки
    Ответ написан
    2 комментария
  • Какой из команд обновить ветку относительно основной?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Единственно правильного способа нет, их несколько и все могут быть правильными, в зависимости от того, чего вы хотите добиться и как принято работать в вашем проекте/команде.

    Итак, сейчас вы находитесь в своей тематической ветке #1234 и вызвали контекстное меню основной ветки develop.

    Compare with "#1234"
    — сравнить ветку на которую вы кликнули (это develop) с текущей веткой #1234

    Rebase "#1234" onto "develop"
    — пересоздать/пересобрать тематическую ветку #1234 поверх (onto) актуальной ветки develop. Будет выглядеть как если бы вы создали свою ветку только что, и она по определению будет содержать все актуальные изменения основной ветки. Этот способ годится только если вы работаете один в тематической ветке, потому что мы фактически удаляем её и создаём новую. Если ветка общая, то в репозиториях коллег ничего автоматом не перестроится.

    Merge "develop" into "#1234"
    — забрать изменения из develop в нашу (into) ветку #1234 путем создания коммита слияния (merge commit). Такой способ способ обычно используют для синхронизации долгоживущих общих веток.
    Ответ написан
    1 комментарий
  • Как на GO послать сообщение в Телеграм (канал, лично) проще всего?

    1. Создать телеграм-бота, через @BotFather
    2. Получить в процессе создания токен.
    3. Админ должен нажать start в личке с созданным ботом (иначе бот ему не сможет отправлять сообщения).
    4. Используя библиотеку https://github.com/go-telegram-bot-api/telegram-bot-api послать сообщение админу (нужно знать юзерайди админа).
    Ответ написан
    1 комментарий
  • Как внедрить в Го проект Vue компоненты?

    Fragster
    @Fragster
    помогло? отметь решением!
    Делай на го api (rest или json rpc), а на vue фронт, который взаимодействует с этим api. прям совсем в разных папках и независимо друг от друга.
    Ответ написан
    9 комментариев