Leonid
парни, только вы сразу узнавайте у фронта, там будут просто вебсокеты или socket.io
Leonid
я очень сильно попал, когда не спросил 😊
Evgeniy
прийдется тоже переписывать, мы уже оговорили)
🏁Александр
V
это юникс, да, man - это документация
MOS2502
Подскажите, как то можно WriteFile, _ := os.OpenFile... передать в другую функциию?
Daniel
Anonymous
MOS2502
Спасибо, во всей моей конструкции не хватило только os. :)
🏁Александр
ну он же на базе стандартного вебсокета?
🏁Александр
это же JS либа, она ничего нового придумать не может особо
🏁Александр
вебсокеты на уровне браузера реализованы же
Leonid
https://github.com/googollee/go-socket.io
Leonid
там куча всего придумано. и напрямую не дружат
Leonid
там при соединении надо уже хитрить
Алексей
Уважаемые знатоки, может кто подсказать как сделать именованный 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, и тогда за пределами пакета константу такую будет создать невозможно
Daniel
нет
Daniel
на информативность дампа - да
heavycharged
поясните за ресиверы для метода, есть ли разница между этим
func (Data) Show()
и этим
func (d Data) Show()
Anonymous
нет
эту команду можно к винде прикрутить?
Anonymous
переключаться постоянно как то не круто
Chrome
а зачем постоянно?
Dmitrii
Chrome
ну так, а зачем её постоянно выполнять?
Anonymous
так было бы проще, и время экономит
Andrey
Докер есть, например
I
Chrome
так ты отладь, а потом готовую стрипай уже
Chrome
или у тя поставка раз в полчаса)
Chrome
а так да, виртуалку какую типо вбокс
Chrome
или win10 с ядром Linux
heavycharged
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
Kirill
Andrei 🦉
Мерль
Мерль
если ты конечно с Get хуком не нахимичишь особо изысканным образом
heavycharged
благодарю
Aleksandr
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
либо я не совсем полностью понял смысл слов в том предложении, и они именно это и имели ввиду.
Илья
посмотри в исходник, там же всё понятно? что-то странное ты усложняешь, при каждом вызове get будет возврат нового ресруса, или ресурса, которые был возвращен в пул, если ты в пул вернешь указатель на то, что еще используешь (sic!), то от этого тебя никто не защитит 🙂
Илья
Илья
развернутей некуда
Alexander
sync.Pool позволяет не аллоцировать объекты заново, а переиспользовать существующие. Но каждый из них будет одновременно выдан в пользование только одной горутине, конечно же.
heavycharged
посмотри в исходник, там же всё понятно? что-то странное ты усложняешь, при каждом вызове get будет возврат нового ресруса, или ресурса, которые был возвращен в пул, если ты в пул вернешь указатель на то, что еще используешь (sic!), то от этого тебя никто не защитит 🙂
исходники сложна-сложна, я ещё не на столько познал Go чтобы понять как все работает внутри. я уже понял, что главное ложить отработанный кусок только тогда, когда он уже 100% будет не нужен, иначе можно наткнуться на случай. когда две горутины получат один и тот же кусок.
Alexander
Alexander
Обрати внимание как создается новый пул