Leonid
парни, только вы сразу узнавайте у фронта, там будут просто вебсокеты или socket.io
Leonid
я очень сильно попал, когда не спросил 😊
Evgeniy
прийдется тоже переписывать, мы уже оговорили)
Anonymous
можешь еще стрипнуть, man strip
как это использовать? в гугле не нашел :/
🏁Александр
V
как это использовать? в гугле не нашел :/
в терминале написать man strip и почитать 🙂
Anonymous
в терминале написать man strip и почитать 🙂
надо под линем зайти? в винде нет такой команды
V
это юникс, да, man - это документация
MOS2502
Подскажите, как то можно WriteFile, _ := os.OpenFile... передать в другую функциию?
MOS2502
Спасибо, во всей моей конструкции не хватило только os. :)
Leonid
а в чем разница? 🙂
во всем. там более хитрый протокол.
🏁Александр
ну он же на базе стандартного вебсокета?
🏁Александр
это же JS либа, она ничего нового придумать не может особо
🏁Александр
вебсокеты на уровне браузера реализованы же
Leonid
https://github.com/googollee/go-socket.io
Leonid
там куча всего придумано. и напрямую не дружат
Leonid
там при соединении надо уже хитрить
Anonymous
как это использовать? в гугле не нашел :/
Очень просто: strip <binary>, но нужен linux, да :)
Алексей
Уважаемые знатоки, может кто подсказать как сделать именованный enum ? и можно ли это вообще сделать? сейчас имеется что-то вроде const ( A = iota B C B ) а хочется что бы было, что-то вроде: const SomeTypes ( A = iota B C B )
Daniel
iota нельзя априменить с типизованными константами
Daniel
но написать type SomeType int const A SomeType = 1 никто не мешает. можно еще сделать type someType, и тогда за пределами пакета константу такую будет создать невозможно
Anonymous
Очень просто: strip <binary>, но нужен linux, да :)
круто Эта штука может повлиять на работоспособность программы?
Daniel
нет
Daniel
на информативность дампа - да
heavycharged
поясните за ресиверы для метода, есть ли разница между этим func (Data) Show() и этим func (d Data) Show()
Anonymous
нет
эту команду можно к винде прикрутить?
Anonymous
переключаться постоянно как то не круто
Chrome
а зачем постоянно?
Anonymous
а зачем постоянно?
я в основном под виндой сижу
Chrome
ну так, а зачем её постоянно выполнять?
Anonymous
ну так, а зачем её постоянно выполнять?
свапать систему чтобы убрать дебаг инфу?
Anonymous
так было бы проще, и время экономит
Andrey
Докер есть, например
I
поясните за ресиверы для метода, есть ли разница между этим func (Data) Show() и этим func (d Data) Show()
Скинь мне потом в личку ответ, пожалуйста, самому интересен ответ на данный вопрос
Chrome
так ты отладь, а потом готовую стрипай уже
Chrome
или у тя поставка раз в полчаса)
Chrome
а так да, виртуалку какую типо вбокс
heavycharged
Скинь мне потом в личку ответ, пожалуйста, самому интересен ответ на данный вопрос
окей, но кажется я начинаю догадываться, когда нам не нужен сама Data, но нужно вернуть что-то константное, например какую-то строку, то можно так сделать. Но подожду пока дадут ответ.
Chrome
или win10 с ядром Linux
Alexander
поясните за ресиверы для метода, есть ли разница между этим func (Data) Show() и этим func (d Data) Show()
разницы нет, но во втором случае, действительно, свойства структуры недоступны. Встает вопрос, зачем тогда вообще ресивер, но это философия.
heavycharged
а если у нас будет указатель на структуру, например movie := &Movie{} то вызов movie.TableName() можно-же сделать, даже не смотря на то что метод определен не на ссылочном типе, я правильно понимаю?
Alexander
да, ссылки автоматически разыменовываются
heavycharged
спасибо большое за ответы!
heavycharged
а ещё вопрос: если мы юзаем sync.Pool{}, и кладем туда буферы (bytes.Buffer), мы должны туда ложить *bytes.Buffer, и в описании к sync.Pool говорится, что он concurrent-safe, то имеется ввиду сам sync.Pool конкурент сэйф, или и объекты которые в нем расположены? Правильно ли я понимаю, что сам sync.Pool отдает только те объекты, которые уже помечены GC как потенциально готовые для сбора? Может я сейчас фигню сморозил, но в целом, концепция такая? Или объекты возвращаемые с sync.Pool могут оказаться одновременно под использованием двух разных горутин?
Daniel
cuncurent safe только сам пул
Daniel
отдает пул то, что в нет есть
heavycharged
вроде ответил, но ничего не прояснилось. Первая горутина: делает Pool.Get(), получаю буфер. Вторая гонутина: делает Pool.Get(), получает тот же самый буфер. Обе горутины пишут в один и тот же буфер. Такая ситуация возможна?
Kirill
Andrei 🦉
^
нельзя
Мерль
если ты конечно с Get хуком не нахимичишь особо изысканным образом
heavycharged
благодарю
Aleksandr
(я не знаю про какую реализацию ты говоришь)(\
heavycharged
var bufPool = sync.Pool{} const maxBufCap = 1 << 11 func newBuf() *bytes.Buffer { buf := bufPool.Get() if buf != nil { return buf.(*bytes.Buffer) } return new(bytes.Buffer) } func storeBuf(b *bytes.Buffer) { b.Reset() bufPool.Put(b) }
heavycharged
просто на каждый request http, делаю newBuf(), а в конце storeBuf()
heavycharged
как-то так
heavycharged
видимо, невозможен такой кейс, потому как pool.Get() удаляет из пула текущий объект, если я его взял оттуда, то значит следующая горутина получит другой буфер при Get()
Aleksandr
как-то так
A Pool is safe for use by multiple goroutines simultaneously.
Илья
нельзя
что именно нельзя?
Илья
https://play.golang.org/p/_0V5y0Mcd0f
Andrei 🦉
что именно нельзя?
"Уважаемые знатоки, может кто подсказать как сделать именованный enum ? и можно ли это вообще сделать?"
heavycharged
A Pool is safe for use by multiple goroutines simultaneously.
ну эта фраза не однозначная, то что внутри Pool все горутино безопасно - понятно, вопрос был в том, результат функции Get() будет безопасным в рамках каждой горутины сделавшей этот Get(). Но вроде я понял, что для разных горутин - разные ссылки на буферы.
heavycharged
либо я не совсем полностью понял смысл слов в том предложении, и они именно это и имели ввиду.
Ivan
https://play.golang.org/p/_0V5y0Mcd0f
а можно спросить? какое применение iota ? или где про него можно прочитать и понять. Буду рад развернутому ответу)
Илья
посмотри в исходник, там же всё понятно? что-то странное ты усложняешь, при каждом вызове get будет возврат нового ресруса, или ресурса, которые был возвращен в пул, если ты в пул вернешь указатель на то, что еще используешь (sic!), то от этого тебя никто не защитит 🙂
Илья
развернутей некуда
Alexander
sync.Pool позволяет не аллоцировать объекты заново, а переиспользовать существующие. Но каждый из них будет одновременно выдан в пользование только одной горутине, конечно же.
Alexander
либо я не совсем полностью понял смысл слов в том предложении, и они именно это и имели ввиду.
И еще в sync.Pool уже встроен механизм создания новых объектов. Нужно просто назначить функцию в свойство New.
heavycharged
посмотри в исходник, там же всё понятно? что-то странное ты усложняешь, при каждом вызове get будет возврат нового ресруса, или ресурса, которые был возвращен в пул, если ты в пул вернешь указатель на то, что еще используешь (sic!), то от этого тебя никто не защитит 🙂
исходники сложна-сложна, я ещё не на столько познал Go чтобы понять как все работает внутри. я уже понял, что главное ложить отработанный кусок только тогда, когда он уже 100% будет не нужен, иначе можно наткнуться на случай. когда две горутины получат один и тот же кусок.
Alexander
Обрати внимание как создается новый пул