Size: a a a

2020 May 21

ВС

Владимир Столяров... in Go-go!
О, gjson)
источник

ВС

Владимир Столяров... in Go-go!
Roman Sharkov
учитывая что оно должно в таком случае уметь и это:

v, ok := slice[6]

то название не совсем подходящее

P.S. зачем? чтоб можно было:

v, ok := foo.Bar.Baz[6].Fuzz
И да, с массивами оно тоже работает https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Optional_chaining
источник
2020 May 22

MB

Mika Bond in Go-go!
Ребят а кто-нибудь работал с https://github.com/fiorix/go-smpp/
источник

p

pragus in Go-go!
Mika Bond
Ребят а кто-нибудь работал с https://github.com/fiorix/go-smpp/
Это опрос?
источник

MB

Mika Bond in Go-go!
pragus
Это опрос?
помощь нужна, я как понял это все с локалхост запустить можно
источник

MB

Mika Bond in Go-go!
?
источник

ST

Stanislav Tikhonov in Go-go!
всем привет, подскажите в вопросе с го?)
источник

ST

Stanislav Tikhonov in Go-go!
я сейчас реализовую event emitter на голанге
я недавно начал учить го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите  мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает  синхронная ли операция
  ee.On("event", handler1, true)
 ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
 defer wg.Done()
 f(name, data...)
}

......................................................

var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
   if listener.async {
     wg.Add(1)
     go asyncWrapper(listener.listener, name, data, &wg)
     continue
   } else {
     listener.listener(name, data...)
   }
 }
 wg.Wait()
норм ли это способ диспатчить  слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация
источник

p

pragus in Go-go!
Stanislav Tikhonov
я сейчас реализовую event emitter на голанге
я недавно начал учить го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите  мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает  синхронная ли операция
  ee.On("event", handler1, true)
 ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
 defer wg.Done()
 f(name, data...)
}

......................................................

var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
   if listener.async {
     wg.Add(1)
     go asyncWrapper(listener.listener, name, data, &wg)
     continue
   } else {
     listener.listener(name, data...)
   }
 }
 wg.Wait()
норм ли это способ диспатчить  слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация
1. В go нет тредов
2. В go нет асинхронных операций
источник

p

pragus in Go-go!
Stanislav Tikhonov
я сейчас реализовую event emitter на голанге
я недавно начал учить го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите  мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает  синхронная ли операция
  ee.On("event", handler1, true)
 ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
 defer wg.Done()
 f(name, data...)
}

......................................................

var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
   if listener.async {
     wg.Add(1)
     go asyncWrapper(listener.listener, name, data, &wg)
     continue
   } else {
     listener.listener(name, data...)
   }
 }
 wg.Wait()
норм ли это способ диспатчить  слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация
А зачем разделение на sync/async ?
источник

ST

Stanislav Tikhonov in Go-go!
pragus
1. В go нет тредов
2. В go нет асинхронных операций
1. где же тогда запускаются функции как не в отдельном потоке\процессе выполнения при использовании одного адресного пространства?
источник

RS

Roman Sharkov in Go-go!
Stanislav Tikhonov
я сейчас реализовую event emitter на голанге
я недавно начал учить го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите  мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает  синхронная ли операция
  ee.On("event", handler1, true)
 ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
 defer wg.Done()
 f(name, data...)
}

......................................................

var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
   if listener.async {
     wg.Add(1)
     go asyncWrapper(listener.listener, name, data, &wg)
     continue
   } else {
     listener.listener(name, data...)
   }
 }
 wg.Wait()
норм ли это способ диспатчить  слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация
On(eventName string) (<-chan Data, error)

вот так должен выглядеть ваш регистратор обработчика
источник

p

pragus in Go-go!
Roman Sharkov
On(eventName string) (<-chan Data, error)

вот так должен выглядеть ваш регистратор обработчика
Ну вот что ты начинаешь ;))
источник

RS

Roman Sharkov in Go-go!
Stanislav Tikhonov
1. где же тогда запускаются функции как не в отдельном потоке\процессе выполнения при использовании одного адресного пространства?
почитайте про то, как устроена многопоточность в Go, и что такое горутины 🙂
источник

p

pragus in Go-go!
Stanislav Tikhonov
1. где же тогда запускаются функции как не в отдельном потоке\процессе выполнения при использовании одного адресного пространства?
Речь о том, что вы этим никак не управляете.
источник

ST

Stanislav Tikhonov in Go-go!
pragus
А зачем разделение на sync/async ?
задумка , чтобы тяжелые, долгие операции запускать в рутинах(может  async и не к месту так, как используется не один поток, тем не менее )
стоит ли простые операции диспатчить как рутины?
источник

ST

Stanislav Tikhonov in Go-go!
pragus
Речь о том, что вы этим никак не управляете.
ну , тут я это понимаю
источник

p

pragus in Go-go!
Stanislav Tikhonov
задумка , чтобы тяжелые, долгие операции запускать в рутинах(может  async и не к месту так, как используется не один поток, тем не менее )
стоит ли простые операции диспатчить как рутины?
А как вы определяете что они тяжёлые/долгие? И главный вопрос - зачем так делать?
источник

ST

Stanislav Tikhonov in Go-go!
Roman Sharkov
почитайте про то, как устроена многопоточность в Go, и что такое горутины 🙂
на n реальных потоков ОС распределяет все горутины(которых может быть и сотни)
источник

RS

Roman Sharkov in Go-go!
Stanislav Tikhonov
задумка , чтобы тяжелые, долгие операции запускать в рутинах(может  async и не к месту так, как используется не один поток, тем не менее )
стоит ли простые операции диспатчить как рутины?
это не задача диспетчера. Его задача оповещать когда затригерится тот или иной event. Он не должен пораждать горутины
источник