
Vladimir
21.04.2018
14:07:26
Зависит от того что такое db и у тебя

Andrii
21.04.2018
14:07:42
func GetResources(w http.ResponseWriter, r *http.Request) {
var resources []Product
db.Find(&resources)
json.NewEncoder(w).Encode(&resources)
if err != nil {
w.WriteHeader(500)
}
return
}

Vladimir
21.04.2018
14:07:46
А дальше читаешь документацию по http.ResponseWriter

Andrii
21.04.2018
14:07:49
db data base

Google

Andrii
21.04.2018
14:07:55
Я вот так дополнил
думал что верно

Vladimir
21.04.2018
14:08:08
Сначала
И 500ка это не хедер

Andrii
21.04.2018
14:08:35
А
Понял
спасибо

Vladimir
21.04.2018
14:10:36
Понял
err := json.Encode(...)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
По аналогии делай у себя. Учти что Фаинд тоже может ничего не вернуть
Точнее ошибку

Andrii
21.04.2018
14:11:28
Спасибо)
А 404 200 и 204 ето хедер или по тому же примеру?

Google

Stanislav
21.04.2018
14:15:39
почитайте про http в общем чтоли для начала)
это ответы сервера

Andrii
21.04.2018
14:17:07
Окей

Vladimir
21.04.2018
15:30:26
Нормальная Иде или вим тебе дополнят

Sergey
21.04.2018
17:34:50
ого

Александр
21.04.2018
17:39:49
народ а кто работал с bcrypt?

dimcha
21.04.2018
17:44:13
подскажите, плз, какую взять in-memory db с SQL-подобным синтаксисом? Так чтобы на поиске очень быстрой была

Subbotin
21.04.2018
17:46:20
Очень быстро и инмемори

dimcha
21.04.2018
17:46:45
это то что первое приходит на ум, но по-скорости у меня сомнения (

Yuriy
21.04.2018
17:50:23
Sqlite?
Можно посмотреть в сторону https://tarantool.io/en/developers.html
Однако она может быть избыточной для небольших задач..

Subbotin
21.04.2018
17:52:00
И не SQL.

dimcha
21.04.2018
17:52:35
не, это оверинжиниринг

Subbotin
21.04.2018
17:55:23
Так что там с требуемой скоростью?

Vladimir
21.04.2018
17:55:32
Точнее там можно поиграть параметрами и получить разные характеристики

dimcha
21.04.2018
18:21:36

Alexey
21.04.2018
18:52:46
Но в продакшен я б проверил и тесты обязательны

Google

Alexey
21.04.2018
19:13:27
Я с sqlite сравнивал, с другими, естественно зависит от тяжести запросов

dimcha
21.04.2018
19:16:26
Спасибо огромное!

Alexey
21.04.2018
19:21:32
Ну и sqlite на C, поэтому конвртация типов и т.д. Короче нужно проверять

Friedrich
21.04.2018
19:23:35
Компилируемый, как C#?

Alexey
21.04.2018
19:28:27

Zerogoki
21.04.2018
19:45:18
У меня почему-то несколько горутин выполняют одно и то же задание из канала заданий
Вот как тут сделал
https://gobyexample.com/worker-pools
Почему-то иногда случается, что одно задание сразу нескольким горутинам попадает, хотя так не должно быть
Все задания в канале сидят, там дубликатов нет
И при чтении его оттуда же оно удаляется?

Alexey
21.04.2018
19:59:28

Zerogoki
21.04.2018
19:59:39
Там строки

g
21.04.2018
20:01:01
Строка разве не ссылочный тип в го?

Zerogoki
21.04.2018
20:01:19
Такого просто в принципе быть не должно, ибо если что-то хотя бы раз прочитало канал, то прочитанного значения там уже не будет

Alexey
21.04.2018
20:01:59
Пойду лучше в новый сезон экстрасенсов, там денег дают

Alexey
21.04.2018
20:02:16
Они всегда копируются целиком

g
21.04.2018
20:02:50
Тогда мало вводных, кинь код штоле

Alexey
21.04.2018
20:06:44
Чудес не бывает, я тысячу раз проверял, где-то косяк


Zerogoki
21.04.2018
20:06:51
Ну вот такой обработчик:
func HostWorker(jobs <- chan string, results chan <- dahua_controller.Dahua) {
for ip := range jobs{
for _, pair := range loginPairs {
login := pair[0]
password := pair[1]
controller := dahua_controller.New(ip, 37777, login, password)
controller.Init()
switch status := controller.GetStatus(); status {
case 0:
err, serial := controller.Serial()
if err != nil {
fmt.Printf("[%s] Failed to get serial: %s\n", ip, err)
}
err, channelsCount := controller.GetChannelsCount()
if err != nil {
fmt.Printf("[%s] Failed to get channels count: %s\n", ip, err)
}
fmt.Printf("[%s] Logged with %s:%s, %s, %d channels\n", ip, login, password, serial, channelsCount)
results <- controller
break
case 1:
continue
case 2:
fmt.Printf("[%s] Blocked\n", ip)
results <- controller
break
case -2:
fmt.Printf("[%s] Failed to connect\n", ip)
results <- controller
break
default:
fmt.Printf("[%s] Read fail\n", ip)
results <- controller
break
}
}
}
}
И вот так запускаю обработчики
resultsChannel := make(chan dahua_controller.Dahua)
jobsChannel := make(chan string, len(ipList))
for w := 0; w < MaxWorkers; w++ {
go HostWorker(jobsChannel, resultsChannel)
}
for _, ip := range ipList {
jobsChannel <- ip
}
close(jobsChannel)
var results []dahua_controller.Dahua
for i := 0; i <= len(ipList); i++ {
results = append(results, <-resultsChannel)
}

Google

Alexey
21.04.2018
20:14:08
Есть всякие play.golang.com space там... так сложно в телепоне видеть.
Но структуры по ссылке передаются

Sergey
21.04.2018
20:18:49

Admin
ERROR: S client not available

g
21.04.2018
20:19:26
Могу предположить, что проблема в range по значению iplist
https://play.golang.org/p/rqmudJydgbg

Zerogoki
21.04.2018
20:21:44
Это список строк просто
Каждую строку в канал заданий пихаю

Friedrich
21.04.2018
20:22:27
Я ноль в Go, Ваш chanel прорекламировали в группе python
Расскажите что и зачем и почему

Zerogoki
21.04.2018
20:23:05
https://golang.org/doc/effective_go.html

Friedrich
21.04.2018
20:23:24
Не я другое хотел спросить
ЗАч он нужен если есть python?

Zerogoki
21.04.2018
20:23:44
Быстрее
И асинхронность нормальная

Friedrich
21.04.2018
20:24:05
Ну в python тоже потоки можно настроить
Ясн

Никита
21.04.2018
20:27:40

Friedrich
21.04.2018
20:29:39
Ля шо тут Аниме, шо там Аниме
0 различий

Google

Alexey
21.04.2018
20:30:18
Не, пайтон норм, там есть потоки..

g
21.04.2018
20:31:05
Nodejs еще есть

Daniel
21.04.2018
20:31:11

Friedrich
21.04.2018
20:31:56
Разумные?

Daniel
21.04.2018
20:32:19
как происходит работа с общими переменными в питоне?

Friedrich
21.04.2018
20:32:39
глобальными?

Daniel
21.04.2018
20:32:55
наверное
просто в других языках глобальными называются другие переменные

Friedrich
21.04.2018
20:33:22
Можно обращаться в любом месте из любой функции и т.д

Daniel
21.04.2018
20:33:28
ага
а как они синхронизируются?

Sergey
21.04.2018
20:33:45