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 golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.