No offense intended, but that code is wrong on so many levels... On Sun, Nov 25, 2018, 17:10 <lary...@gmail.com> wrote:
> 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. > -- -j -- 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.