• Как защитить пароль при передаче формы на сервер?

    Если вы хотите добиться той же надежности что и при передаче по https, то да - вариант один - реализация асимметрично шифрованного канала на уровне ajax. Не знаю есть ли библы такие.
    Если же речь идет не о регистрации (допустим первая передача пароля у вас всегда защищена) то варианты есть.
    Например сервер генерит рандомную строку и передает ее пользователю. Пользовтель вычисляет хэш от своего пароля и используя этот хэш как ключ шифрует эту рандомную строку блюфишем например (реализация на js есть точно) и передает вам обратно. Вы со своей сторны используя хэш хранимый на сервере, так же шифруете эту рандомную строку блюфишем. Сравниваете.
    Злоумышленнику придется атаковать ключ блюфиша по рандомному исходному тексту и шифротексту. Задача не из простых.
    Ответ написан
    6 комментариев
  • Как запустить горутину навечно?

    я думаю, что весь секрет в строке
    //Working with DB
    То есть утекает память из-за того самого кода, который нам не показан.
    С "вечной" горутиной пролем вроде как нет.
    Ответ написан
    Комментировать
  • Почему код в одном случае работает, а в другом - нет и выдает ошибку?

    @Wirusnyy-chel
    Канал done у вас в обоих случаях не буфферизированый - это значит что для выполнения операции записи в канал должны быть готовы и писатель (ch<-val) и читатель (<-ch).

    В первом варианте у вас писатель готов совершить операцию, но у него нет читателя и этот поток исполнения ставится на паузу, до тех пор, пока не появится читатель, а читатель определён в этом же потоке поэтому его никогда не будет. Программа зависнет и может упасть с ошибкой.
    Это можно поправить сделав канал буфферизированным
    done := make(chan book, 1)


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

    В го автоматическое управление памятью, поэтому утечек памяти в классическом смысле быть не может (если не использовать пакет unsafe). Но могут быть утечки горутин (когда вы запускаете горутины, но они не завершаются, а блокируются на каком-то io или мьютексе/канале/...)

    Такое легко ищется с помощью pprof. Добавьте в свою программу веб-интерфейс pprof-а

    Для этого запустите любой http-сервер из стандартной библиотеки и добавьте импорт import _ "net/http/pprof"

    Например так:
    import (
      "net/http"
      _ "net/http/pprof"
    )
    
    ...
    
    func main() {
      ...
      http.ListenAndServe("localhost:8080", nil)
    }


    После этого при запуске программы у вас должен открываться веб-интерфейс pprof-а по адресу 127.0.0.1:8080/debug/pprof

    Дождитесь, когда накопятся утечки и откройте страницу 127.0.0.1:8080/debug/pprof/goroutine?debug=1

    На ней будет список всех работающих горутин и их количество. Найдите группу с самым большим количеством, она и утекает. По стеку посмотрите, где горутина блокируется, тогда поймете, почему они накапливаются.
    Ответ написан
    3 комментария
  • Условие если N одинаковых элементов в массиве?

    dmpichugin
    @dmpichugin
    Gopher
    С этой задачей можно легко справиться с помощью map.
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	result := make(map[int]int)
    	s := []int{1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 7}
    	for _, v := range s {
    		result[v]++
    	}
    	fmt.Println(result)
    }

    Например, нужно вывести кто повторяется.
    for k, v := range result {
    		if v >= 2 {
    			fmt.Printf("key = %d, count = %d\n", k, v)
    		}
    }
    Ответ написан
    Комментировать
  • Как сделать изменение размера шрифта у сайта фиксированной ширины?

    @0leg5ergeev
    Самые глупые вопросы здесь задаю я
    /* Small devices (tablets, 768px and up) */
    @media (max-width: 768px) {
      .class{  font-size: 16px;}
    }
    Ответ написан
    1 комментарий