The problem is the calling convention. syscall.NewCallback has to
take the C values, which arrive using the C calling convention, and
pass them to Go using the Go calling convention. On amd64 the main
step here is callbackasm1 in runtime/sys_windows_amd64.s That
function takes the C argument registers and stores them in the right
place for the Go code. Unfortunately, on x86 floats are passed in
floating point registers, not the ordinary argument registers. So to
handle floating point arguments the code would need to get them from
the right register.
Not supporting this case is not a philosophical issue. It's that
nobody really knows how to implement it.
Ian