Daniel
https://play.golang.org/p/taYj__NQ08m
ну этот-то код совсем некорректный
Andrei 🦉
вернее даже так https://play.golang.org/p/pgxVLBwvJKr
Andrei 🦉
ну этот-то код совсем некорректный
ну я вначале просто выкинул задвоенное чтение из канала
Daniel
я вот боюсь постить примеры кода до того, как человек объяснит, что же он сделать пытается
Alexander
https://play.golang.org/p/TvtrMfZDdEr подскажите, почему так работает? и как создать такого бесконечного слушателя правильно?
В 15 строчке из канала читается значение, потом еще раз в 18 _следующее_ значение. Нужно считать один раз и присвоить переменной
Alexander
Но проще через range. А в main просто канал закрыть
Anonymous
тут дело не в выводе, я хочу чтобы гоурутина слушала команды через поток, и уже при изменении значения в канале что-то делала, я смотрел инфинити луп на стак оверфлоу, но почему-то у меня так не работает
Andrei 🦉
тут дело не в выводе, я хочу чтобы гоурутина слушала команды через поток, и уже при изменении значения в канале что-то делала, я смотрел инфинити луп на стак оверфлоу, но почему-то у меня так не работает
https://play.golang.org/p/pgxVLBwvJKr вот в этом примере горутина будет слушать канал до тех пор, пока он не будет закрыт и будет реагировать на каждое новое сообщение в этом канале
Andrei 🦉
и main дождется завершения работы горутины с помощью wg.Wait
Anonymous
а почему извлечение значения происходит через range? зачем итерировать по объекту если он хранит 1 значение? не могу въхать
Andrei 🦉
желательно этот тур пройти весь
Anonymous
я в процссе, просто вопрос возник заранее, спасибо
Oleksandr
ребята, подскажите - как в go решается такая задача есть http-api, к нему нужно делать запросы при этом на один end-point может отсылаться несколько запросов - сработать должен только первый в том числе в ситуации когда второй запрос поступил до того как пришёл ответ на первый все последующие запросы должны получить данные, также как и первый на JS это бы выглядело как-то так var Cache = {} function MakeRequest(name){ if (!Cache[name]){ const url = `https://api.github.com/users/${name}` Cache[name] = fetch(url) } return Cache[name]; } var r1 = MakeRequest('john'); var r2 = MakeRequest('smith'); var r3 = MakeRequest('john'); //магия r1.then(x=>console.log(x)) r2.then(x=>console.log(x)) r3.then(x=>console.log(x)) на Go у меня получился такой код, но у меня нет уверенности ни в его оптимальности, ни в правильности работы https://play.golang.org/p/tIbtX137vFo
Eugeny
find usage по коду - находишь пример использования
я слепошарый, но примеров использования не нашел
Nikita
ребята, подскажите - как в go решается такая задача есть http-api, к нему нужно делать запросы при этом на один end-point может отсылаться несколько запросов - сработать должен только первый в том числе в ситуации когда второй запрос поступил до того как пришёл ответ на первый все последующие запросы должны получить данные, также как и первый на JS это бы выглядело как-то так var Cache = {} function MakeRequest(name){ if (!Cache[name]){ const url = `https://api.github.com/users/${name}` Cache[name] = fetch(url) } return Cache[name]; } var r1 = MakeRequest('john'); var r2 = MakeRequest('smith'); var r3 = MakeRequest('john'); //магия r1.then(x=>console.log(x)) r2.then(x=>console.log(x)) r3.then(x=>console.log(x)) на Go у меня получился такой код, но у меня нет уверенности ни в его оптимальности, ни в правильности работы https://play.golang.org/p/tIbtX137vFo
Ну во-первых, (*r) можно просто заменить на r, т.к. в го автоматическое разыменовывание, во-вторых, хендлеры исполняются в отдельных горутинах, потому код потоконебезопасен
Oleksandr
ага, разименовывание убрал а что называете хендлерами? - у меня же http-клиент, а не сервер и в чём может проявится потоконебезопасность если не используется общая память?
Oleksandr
ага, понял - логично
Aleksandr
я слепошарый, но примеров использования не нашел
бывает. https://github.com/moby/moby/search?utf8=%E2%9C%93&q=NewClientWithOpts&type=
Oleksandr
Есть sync.Once, если я правильно понял задачу
как я понял once.Do просто выполняет переданную функцию лишь раз при этом нет ни возможности передать в функцию параметры, ни получить возвращаемое значение в моём же случае нужен возврат, необходимость повторного вызова зависит от переданных параметров, и главное - то что функция асинхронна
Andrei 🦉
как я понял once.Do просто выполняет переданную функцию лишь раз при этом нет ни возможности передать в функцию параметры, ни получить возвращаемое значение в моём же случае нужен возврат, необходимость повторного вызова зависит от переданных параметров, и главное - то что функция асинхронна
у тебя не получится тру асинхронности при такой постановке задачи или ты ставишь лок на мапу от момента получения Request по ключу и до завершения запроса и записи результата в мапу, или у тебя получается гонка
Oleksandr
гонка, я так понимаю это race, т.е. последовательное вполнение асинхронных вопросов? с локом на мапу не очень понимаю; по идее можно использовать sync.Map - который concurrency-safe?
Илья
тут как раз про то, когда что использовать
Eugene
Ребята, есть возможность как то определить, что пришел ajax-запрос ? Не приходит заголовок: X-Requested-With по которому можно определить. Отправляю из браузера, тип XHR
Oleksandr
а в devtools браузера тоже нет этого хедера?
Eugene
нет
Oleksandr
на вкладку XHR ещё попадают запросы сделанные через fetch() на бекенде мы их никак не можем определить, но можно добавить к ним кастомный заголовок лучше, чтоб он был по смыслу - вроде "Accept": "application/json"
Eugene
отправка была через jquery
Eugene
нет: дело в том, что хочется знать что приходит с фронта. и каким способом, что бы отдавать данные. "Accept": "application/json" тут не катит. этот заголовок можно применять и без XHR
Eugene
нашел выход только в императивном указании на js: ` beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'xmlhttprequest');}, `
Eugene
больше никак
Oleksandr
может в настройках запроса crossDomain стоит в true?
Kirya
или query параметр добавляй ajax=true
Eugene
crossDomain = false да и стоит CORS
Eugene
ajax=true на каждый запрос не надобавляешься
Eugene
да и костыль это
Oleksandr
так запрос на тот же домен или кроссдоменный?
Eugene
на поддомен
Oleksandr
тогда получается он как кроссдоменный
Eugene
на поддомен разрешены только с нескольких хостов
Oleksandr
вот что по этому поводу написано в исходниках jQuery // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. так что - авторы советуют юзать .ajaxSetup() - по сути тот же beforeSend
Eugene
ajaxSetup - согласен
Eugene
другой вопрос, как обходится без jquery. Напрмер, часто работаю с VueJS. там своя либа. и там тоже надо насраивать заголовки
Oleksandr
понятно что всё равно всё идёт к тому что все будут использовать fetch() - осталось чтоб ie11 додох ну а вокруг fetch(), да в принципе и любой библиотечкой функции wrapper написать несложно
Eugene
не. у нас проекты такие: обязательная поддержка FF48 - а это вообще беда
Eugene
Кстати, crossDomain = true - не помог. а beforeSend = работает как надо. Всем спасибо
Oleksandr
ты не понял - crossDomain как раз таки false должен быть - для кроссдоменных запросов не ставится этот заголовок например $.ajaxSetup({crossDomain:false}); $.get('https://api.github.com/users/john') но.. стоит нам изменить https на http и получим “preflight is invalid redirect error, о которой и предупреждают авторы jQuery так что лучше уже хедер указать
Eugene
так он по умолчанию false и был
invariance
а это точно чат по голангу :D
Kirill
что тут за вакханалия
Kirill
какой jq? вы решили вернуться на 10 лет в развитии?
Vasily
это называется ретро типа как пиксель-графика в современных играх
Kirill
это называется разве что созвучно. пиксель-графика хотя бы приятной бывает, а jquery - никогда и не был приятным, а лишь необходимостью
Wingman
Помогите пожалуйста :) https://play.golang.org/p/0tn_2qYZgPf вкратце: запускаю горутину, передаю в неё каналы, передаю из неё данные по каналам, извне закрываю каналы алгоритм таков, что внизу, после завершения for i:=......., a) закрывается канал stopListen б) в горутине запускается кейс <-stopListen в) горутина передаёт данные в канал pingResult г) основной код получает результат из pingResult, и только потом закрывает его НО - у меня, блин, код паникует на строке pingResult <- j.Result(probes) — хотя, по идее, ну никак не может в этом месте канал оказаться закрытым =\
Anonymous
Всем привет, а есть у кого то пример как преопределить функцию сортировки аргументов из пкета flag https://stackoverflow.com/questions/36326038/golang-how-to-disable-automatically-flag-sorting ?
Andrei 🦉
зачем вообще в горутину передавать пачку каналов, а потом закрывать их извне?
Wingman
выглядит как адский оверинжениринг
Угу, но проще - не очень придумывается)
Wingman
зачем вообще в горутину передавать пачку каналов, а потом закрывать их извне?
Один - чтобы завершить в ней "вечный" цикл, второй - чтобы вернуть результат работы
Sergei
Народ, подскажите, пожалуйста Мне приходит строка вида "2006-01-02 15:05:05" Мне надо ее записать в постгрес в таком же виде, но в формате time.Time package main import ( "fmt" "time" ) func main() { result := string2time("2006-01-02 15:05:05") fmt.Println(result) } func string2time(s string) *time.Time { result, _ := time.Parse("2006-01-02 15:04:05", s) return &result } Работает не совсем так 2006-01-02 15:05:05 +0000 UTC Вот как мне получить time.Time без +000 UTC
Andrei 🦉
Один - чтобы завершить в ней "вечный" цикл, второй - чтобы вернуть результат работы
я в таком случае объявляю структуру, горутина работает в приватном методе этой структуры, сама структура выставляет наружу простейшее апи вида Start() error и Stop()
Andrei 🦉
канал со входящими данными для горутины создается, хранится и завершается в методах этой структуры
Andrei 🦉
в итоге получается простой и поддерживаемый кусок кода
Sergei
отформатируй в строку нужного тебе вида
строку gorm не сможет записать в поле "timestamp without time zone"
Sergei
или можно как-то?
Aleksandr
у тебя в базе какой тип?
Sergei
timestamp without time zone
Aleksandr
а как у тебя тогда туда записывается с зоной?
Sergei
вот и мне интересно :(
Vladislav
вот и мне интересно :(
А с чего вы взяли, что оно с таймзоной туда записывается?
Sergei
Sergei
Sergei