Andrey
Смотри, тебе надо юзеру дать первый ответивший сервер, у тебя их 3, как будешь такое делать?
Andrey
ЗЫ: это пример из учебника Го если что)
anhckie
хранил бы таймстемп ответа и отдавал бы 1 из некоего отсортированного списка или последний из стека
anhckie
но это при учете, что я получил все 3 ответа)
anhckie
чего? ну просто складировать в какой-то массив, и отдать первый добавленный
Andrey
Смотри, создаёшь буф канала на 3 элемента, и передаешь его 3 горутинам. Кто первый записал, тот и быстрее
anhckie
ну суть та же
anhckie
но я больше думаю про то, как обойти сетевой поход
anhckie
типа чтоб время простоя минимизировать
anhckie
ну и ресурсы пораньше освободить
Andrey
А ты не думаешь, что занимаешься Овер инженерингом? или тебе это важно?
anhckie
потенциально важно, ибо этих апих может потом быть не 10, а 100
anhckie
и запускается вся процедура уже сйечас раз в минуту по крону
anhckie
+ таймауты у некоторых апих аж по 5 секунд
anhckie
наверное, не стоит мучить жопу и просто добавить еще 4 строки перед походом в апи)
anhckie
типа в каждой стратегии чекать сигнал из контекста перед походом в апи, а потом перед записью в бд
Andrey
типа в каждой стратегии чекать сигнал из контекста перед походом в апи, а потом перед записью в бд
Ну, я бы посоветовал вообще вытащить запись в базу наверх если это возможно, но дело уже твоё
Andrey
И к тому же, не просто так ты и в базу и в реквест обычно контекст передаешь)
anhckie
да, спасибо!) забыл сказать
Anonymous
Какие malware пишут на go?
Anonymous
Я на гите кроме ратников ничего интересного не видел
anhckie
насколько окей с точки зрения соглашений комьюнити хранить константы в файле с интерфейсом, который реализуется рядом структур, которые, в свою очередь, все юзают эти константы?
Кіт ✙
Какие malware пишут на go?
никто ничего не пишет успокойся
anhckie
|strategies |_strategy1.go |_strategy2.go |_interfaces.go (тут интерфейсы + общие константы для всех стратегий)
Юра (Юрий Александрович)
то есть кенцел чекается аж в конце, после работы с базой. а как сделать, чтобы в любой момент времени можно было ее потушить?
> чтобы в любой момент времени можно было ее потушить? такого не бывает. Вам нужно в коде функции в явном виде предусматривать точки, в которых го-рутина может услышать посланный cancel и завершить работу. Этих точек может быть несколько, но созданы они должны быть явно
Илья
Какие malware пишут на go?
тебе бы рассказал один человек, но он в бане
Eugene
малвареписцы сосут пиписцы
Eugene
change my mind
Кіт ✙
ля чо могу
Кіт ✙
Илья
ля чо могу
ого, тебе впервые кто-то написал!!
kosarev
ребят, использовал кто fyne.io? есть вопрос
Илья
Илья
а нужно вместе с Run
kosarev
package main import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) func getDataFromFile(w fyne.Window) []byte { dataChan := make(chan []byte) go func() { data := []byte{1,2,3} fopenDialog := dialog.NewFileOpen( func(file fyne.URIReadCloser, err error) { defer func(){ if file != nil{ file.Close() } }() if err != nil{ dataChan <- nil close(dataChan) return } if file == nil{ dataChan <- nil close(dataChan) return } dataChan <- data close(dataChan) },w) fopenDialog.Resize(fyne.NewSize(600,600)) fopenDialog.Show() }() return <-dataChan } func main(){ app := app.New() app.Settings().SetTheme(theme.DarkTheme()) mainWindow := app.NewWindow("MD5") mainWindow.Resize(fyne.NewSize(705, 560)) mainWindow.SetFixedSize(true) mainWindow.CenterOnScreen() mainWindow.SetMaster() bttn := widget.NewButton("123", func(){ var data []byte fmt.Println(data) data = getDataFromFile(mainWindow) fmt.Println(data) }) mainCont := container.NewVBox( bttn, ) mainWindow.SetContent(mainCont) mainWindow.Show() app.Run() }
kosarev
суть проблемы : лочится диалоговое окно выбора файла - не даёт тыкнуть на файл (хотя в горутине запускается)
Emin Zalaev
Большой код лучше в какой нибудь пастбин кидать
kosarev
факт, но тогда шанс, что этот код будет просмотрен ... значительно уменьшается)
kosarev
пусть эти пару функций тут припаркуются
Emin Zalaev
Хотя бы в моноспейс оберни(
Emin Zalaev
А то как в универе на блокноте
kosarev
хех будет сделано
Илья
хех будет сделано
в общем посмотрел через профилировщик: ты создаешь диалог в уже запущенном окне, поэтому горутина остановлена (chan receive)
Илья
создаешь новое окно
Илья
вызываешь NewFileOpen НЕ в горутине, потому выводишь диалог и само окно
Илья
Код (одинаковый, просто два сайта): https://go.dev/play/p/CMXX3lnqNxr https://pastebin.com/2W4sGLPn
kosarev
спасибо большое энивей! затесщу через час, как буду у ПК также стало интересно кто такой этот профилировщик заверните два!
kosarev
Код (одинаковый, просто два сайта): https://go.dev/play/p/CMXX3lnqNxr https://pastebin.com/2W4sGLPn
сейчас глянул код ну я к этому и эмпирическим путем пришел только смысл теперь от ненужного окна...
Илья
закрываешь окно после диалога
kosarev
закрываешь окно после диалога
это стрёмно для диалогового окна выводить ещё одно окно по фану...(
Илья
диалоговое ОКНО. По крайней мере я не нашел метод, который останавливает текущее окно
Sharifzoda
Вечер добрый
Кіт ✙
Вечер добрый
чифир в хату
Sharifzoda
Как из тела запроса извлечь изображение и сохранить в директорию?
Кіт ✙
главное, удостоверься, что майм image/png
Sharifzoda
Sharifzoda
Так как в теле ещё другие данные передаются
Кіт ✙
request.FormFile норм?
io.Copy(request, fd)
Кіт ✙
или как оно там
Кіт ✙
где request - соответственно, твой *http.Request, а fd - открытый файл на запись
Илья
request.FormFile норм?
а как его отправляют?
Илья
если форма, то да
Илья
Multipart data - другой метод
Кіт ✙
теоретикалли, весь этот стафф маст ассемблиться сервером и не аффектить юзер код
Илья
Multipart data - другой метод
если только тело запроса, то просто скопировать (например как показали выше)
Sharifzoda
Илья
multipart/form-data*
тогда FormFile
Sharifzoda
Спасибо, Гофферы)
Кіт ✙
щаща
Кіт ✙