> > No offense intended, but that code is wrong on so many levels...
I strongly believe you that you are not trying to offend anyone, but this question is interesting for me too, and I'd like more details. Could you please explain, from worst to "less worst", what's wrong with this code? Reflection is sometimes really misleading for people who don't have a deep understanding of the compiler, and such pieces of code exist all around the internet. Would you give us a more precise feedback? Thanks in advance! Le dim. 25 nov. 2018 à 17:17, Jan Mercl <0xj...@gmail.com> a écrit : > 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. > -- 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.