• Зачем нужны интерфейсы в go?

    Интерфейсы нужны для полиморфизма.
    Конкретно в твоём случае да - разницы нет.
    Но чисто в теории ты бы мог сделать вот так:
    type Numbers struct {
      Num1 int
      Num2 int
    }
    
    type ThreeNumbers struct {
      Num1 int
      Num2 int
      Num3 int
    }
    
    func (n Numbers) Sum() int {
      return n.Num1 + n.Num2
    }
    
    func (n ThreeNumbers) Sum() int {
      return n.Num1 + n.Num2 + n.Num3
    }
    
    func SumAll(numbers NumberInterface) int {
      return numbers.Sum()
    }

    Функция SumAll будет работать с любыми типами, которые реализуют интерфейс NumberInterface, причём даже если они сами об этом не в курсе, благодаря утиной типизации.
    Ответ написан
    3 комментария
  • Как не позволить пользователю вставить html тег в div использую js?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    Учти что любой JS можно просто выключить у тебя на сайте и обойти. Тут нужно на стороне сервера обрабатывать и чистить от не нужного.
    Ответ написан
    Комментировать
  • Как из гита навсегда удалить файл?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Самый надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
    # клонируем репозиторий в соседний каталог
    # иначе придётся использовать ключ --force
    git clone --no-local . ../clonerepo/
    # переходим в свежий клон
    cd ../clonerepo
    # чистим
    git filter-repo --path "path/to/file" --invert-paths
    # проверим что файл исчез
    git log --all --oneline --name-status -- "path/to/file"
    Ответ написан
    Комментировать
  • Как правильно передать указатель на переменную?

    Вместо того, чтобы объявлять

    type Forks []struct {
      ForkID           string      `json:"fork_id"`
      Income           float64     `json:"income"`
      Sport            string      `json:"sport"`
    ...............
      AliveSec         int         `json:"alive_sec"`
      ValuingData      ValuingData `json:"valuing_data"`
    }


    Вам нужно объявить тип элемента и тип массива разными типами
    type Fork struct {
      ForkID           string      `json:"fork_id"`
      Income           float64     `json:"income"`
      Sport            string      `json:"sport"`
    ...............
      AliveSec         int         `json:"alive_sec"`
      ValuingData      ValuingData `json:"valuing_data"`
    }
    
    type Forks []Fork


    Тогда сможете сделать так:
    func checkBet(body []byte, v *Fork) {
    ......
    Ответ написан
    1 комментарий
  • Можно ли использовать переменную типа string, как название функции и потом вызвать ее?

    Нет, так сделать нельзя, Го не скриптовый язык.

    Но саму функцию в переменную положить можно. И потом вызвать.

    https://go.dev/play/p/dkF1s6ENnjA
    func main() {
    	fn := some
    	fmt.Println(fn())
    	fn = other
    	fmt.Println(fn())
    }
    
    func some() int {
    	return 1
    }
    
    func other() int {
    	return 2
    }
    Ответ написан
    Комментировать
  • А как тестировать handler?

    Если вы пишите Unit-тест - вместо CityRepository используйте мок, который будет проверять что в него пришел именно тот объект который вы ожидаете.
    Ответ написан
    Комментировать
  • Как заставить volumes Docker compose не затирать данные из контейнера?

    Ожидаю что файлы из директории var/www/html попадут на хост в ./www

    Нет. Наоборот. Монтируется что-то (папка или docker volume) внутрь контейнера, заменяя собой ранее существовавшую (если) в контейнере папку. Или индивидуальный файл.
    volumes: 
       - /папка_на_хосте:/папка_в_контейнере_1
       - имя_тома:/папка_в_контейнере_2
    После этого, если внутри контейнера в этой папке создаётся файл, он оказывается в папке_хоста или томе.

    WordPress при запуске смотрит, есть ли его файлы в папке. И если папка пуста — инсталлируется, распаковывает все свои файлы в неё.

    При этом, разумеется, раз смонтирована папка хоста — все файлы появляются в ней.

    Т.е. нет изначально никаких файлов в контейнере в /var/www/html — будь она папкой контейнера или смонтированной в него папкой хоста или томом докера. При запуске, если там пусто, файлы создаются / записываются контейнером.

    Если хочется так же, создайте баш-скрипт entrypoint.sh, в который поместите логику инициализации приложения, в т.ч. копирование-создание файлов. Укажите его как ENTRYPOINT контейнера.
    Ответ написан
    Комментировать
  • Возможно ли игнорировать файл/папку через .gitignore, которые уже есть в репозитории?

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

    Игнор действует только на те файлы, которые ещё не отслеживаются. Помогает СЛУЧАЙНО не добавить файл. Но лаже игнор не запрещает принудительно загнать файл в репозиторий.

    Если нужно игнорировать файлы конфигурации или секреты, то обычно делают для них шаблон и к имени файла добавляют расширение .sample например. А при реальном развёртывании на основе шаблона создают уже нормальный файл с реальными данными.

    Ещё есть трюк с временным игнорированием изменений в файле, ранее уже добавленном. Но он будет работать только в локальной копии репозитория и только после ввода команды
    git update-index --assume-unchanged файл
    Ответ написан
    Комментировать
  • Как вывести результат "на лету"?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вместо click'а у кнопки обрабатывайте input у формы:

    - document.querySelector('.calculate').addEventListener('click', function () {
    + document.querySelector('form').addEventListener('input', function () {
    Ответ написан
    6 комментариев
  • Почему у React приложения на VPS не работают запросы?

    @ruromufem
    Возможно потому что вместо localhost нужно вписать либо IP vps сервера либо домен который привязан к данному приложению
    Ответ написан
    Комментировать
  • Массив указателей на функции. Почему программа не даёт результат?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно выполнить функцию, из массива указателей на функцию, номер которой я укажу в консоли. Почему не выполняется?

    Потому что mass[0]; -- это не вызов функции, а просто указатель. Вызов функции выглядит так: mass[0]();
    Ответ написан
    Комментировать
  • Массив указателей на функции. Почему программа не даёт результат?

    @Akela_wolf
    Extreme Programmer
    В дополнение к ответу jcmvbkbc
    Потому что вы игнорируете возвращенный функцией menu результат, соответственно в переменной y всегда 0.
    Ответ написан
    Комментировать
  • Что не правильно я делаю с проверкой на прогрузку img?

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

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

    Судя по описанию, обычного цикла должно хватить

    // Массив для получаемых объектов
    const result = [];
    // Переменная для следующего URL (изначально содержит первый адрес)
    let previousURL = "http://site.com/";
    
    
    // Цикл
    for (let i = 0; i < 10; i++) {
      // Получение данных
      const response = await fetch(previousURL);
      const data = await response.json();
    
      // Добавление полученных данных в общий массив
      result.push(data);
    
      // Обновление переменной со следующим URL
      previousURL = data.previousURL;
    }
    
    // Демонстрация получивлегося массива
    console.log( result )
    Ответ написан
    1 комментарий
  • Как правильнее хранить разные типы в одном поле структуры?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Мне кажется вы с ног на голову... Может быть так?
    type Admin struct {
      Permissions map[string]interface{}
      User
    }
    type Subscriber struct {
      Online        bool
      Status        string
      SubscriptedTo []int
      User
    }
    type User struct {
      ID    int
      Login string
    }
    Ответ написан
    Комментировать
  • Как делать бэкап большой базы mysql чтоб бэкэнд не падал?

    @entermix
    Google: "репликация баз данных", соответственно после запуска реплики проводить резервное копирование там
    Ответ написан
    Комментировать
  • Нужен ли babel, если используешь TypeScript?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Typescript compiler - это инструмент проверки типов и компиляции typescript в javascript. Так же он умеет транспайлить конструкции новых стандартов js в более старые стандарты, но это не основная задача этого инструмента, и делает он это хуже целевых инструментов, в частности его можно настроить только на конкретный стандарт.

    Babel - это инструмент для парсинга js кода в AST, обхода и модификации AST и обратной сериализации AST в js. Так же это еще и экосистема плагинов и пресетов. Плагины как правило реализуют транспиляцию одной из фич более нового стандарта в более старый. Пресеты - это просто конфигурируемый набор плагинов.
    Так же в Babel AST есть поддержка некоторых расширений js (а ts - это тоже расширение js), но включается это все флагами.

    В экосистеме babel есть preset-env нацеленный именно на транспиляцию более новых стандартов в более старые. Его особенностью является поддержка browserlist и подключения только тех плагинов, которые нужны для указанных браузеров. За счет этого получается более оптимальный js на выходе, так как многие фичи после транспайлинга работают медленнее чем нативные и занимают больше кода.

    Еще в экосистеме babel есть preset-typescript, который включает поддержку ts синтаксиса и транспиляцию ts в js. При этом, в отличии от tsc, он не делает проверку типов, а некоторые сущности может обрабатывать неправильно (как и большинство сторонних компиляторов ts, т.к. у ts нет строгой спеки и единственным источником правды является код tsc, который далек от идеального).

    Оптимальным по выходному результату (пусть и за счет времени сборки) будет вариант, когда сначала ts код обрабатывается через tsc без транспиляции в старые стандарты, а затем происходит транспиляция с помощью babel + preset-env + browserlist.
    Ответ написан
    3 комментария
  • Есть ли на русском полный учебник по GO?

    @Spargwy
    20 годиков. Голанг баккенд девелопер
    "Язык программирования Go" от создателей
    Но он 2014 вроде, так что некоторых тем может не быть. Наверстаешь в доке.

    UPD: А вообще го не такой объёмный язык. Намного больше времени потратишь, чтобы понять КАК на нём писать, а не на его функционал.
    Ответ написан
    Комментировать
  • Как из массива вывести только 3 первых элемента?

    @dsmoke
    foreach (array_slice($images, 0, 3) as $image) {
       $image['thumb_src']
    }

    https://www.php.net/manual/ru/function.array-slice.php
    Ответ написан
    Комментировать