The code below consumes ~40% of the total execution time. According to the
profiler i := uint64(arg.(uint32)) is a major contributor
// Cast the integer argument to uint64 and call a "writer"
// The "writer" knows how many bytes to add to the binary stream
// Type casts from interface{} to integer consume 40% of the overall
// time. Can I do better? What is interface{} in Golang?
func (b *Binlog) writeArgumentToOutput(writer writer, arg interface{},
argKind reflect.Kind) error {
// unsafe pointer to the data depends on the data type
var err error
switch argKind {
case reflect.Int8:
i := uint64(arg.(int8))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Int16:
i := uint64(arg.(int16))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Int32:
i := uint64(arg.(int32))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Int64:
i := uint64(arg.(int64))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Uint8:
i := uint64(arg.(uint8))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Uint16:
i := uint64(arg.(uint16))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Uint32:
i := uint64(arg.(uint32))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Uint64:
i := uint64(arg.(uint64))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Int:
i := uint64(arg.(int))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
case reflect.Uint:
i := uint64(arg.(uint))
err = writer.write(b.ioWriter, unsafe.Pointer(&i))
default:
return fmt.Errorf("Unsupported type: %T\n", reflect.TypeOf(arg))
}
return err
}
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.