ЛА
У него много магии в го коде, но не с формированием запросов.
Ну и если включить Debug, то все (вместе с плейсхолдерами) можно в прицнипе сразу увидеть в консоли.
Size: a a a
ЛА
PK
i += 1 vs atomic.AddInt32(&i, 1) ?АП
tController.Finish()ЛА
PK
PK
ЛА
ЛА
RL
АП
ЛА
PK
PK
AA
PK
package xfrstat
import "sync/atomic"
// Metrics - статистика передачи данных.
type Metrics struct {
Txb, Rxb uint64 // bytes
Txm, Rxm uint64 // messages
Err uint64 // errors
}
// TxmInc - на одно переданное сообщение больше.
func (m *Metrics) TxmInc() {
atomic.AddUint64(&m.Txm, 1)
}
// RxmInc - на одно прочитанное сообщение больше.
func (m *Metrics) RxmInc() {
atomic.AddUint64(&m.Rxm, 1)
}
// ErrInc - на одну ошибку больше.
func (m *Metrics) ErrInc() {
atomic.AddUint64(&m.Err, 1)
}
// TxbAdd - увеличение счетчика переданных байтов.
func (m *Metrics) TxbAdd(txb int) {
atomic.AddUint64(&m.Txb, uint64(txb))
}
// RxbAdd - увеличение счетчика принятых байтов.
func (m *Metrics) RxbAdd(rxb int) {
atomic.AddUint64(&m.Rxb, uint64(rxb))
}
// Stat - отдать статистику.
func (m *Metrics) Stat() Metrics {
return Metrics{
Txb: atomic.LoadUint64(&m.Txb),
Rxb: atomic.LoadUint64(&m.Rxb),
Txm: atomic.LoadUint64(&m.Txm),
Rxm: atomic.LoadUint64(&m.Rxm),
Err: atomic.LoadUint64(&m.Err),
}
}
PK
PK
PK