Since unsafe.Pointer can convert between types that have the same
underlying type, can unsafe.Pointer also convert between function types
who's arguments & return values have the same underlying type?
The code I would like to use this technique on:
```
type JSExtFunc func(this Value, args Args) interface{}
func (f JSExtFunc) MarshalJS() js.Func {
// I am not sure if this is correct.
var function = *(*func(this js.Value, args []js.Value) interface
{})(unsafe.Pointer(&f))
return js.FuncOf(function)
}
// Arguments for wrapped functions.
type Args []js.Value
type Value js.Value
```
I have tried this out in the go playground, and it does seem to work.
https://go.dev/play/p/XVwRatkuTQv
However, this is undocumented in the language specification.
How likely is this that this code would break, using the same version of Go?
Is this perhaps something to be added in the language specification?
Maybe even a more interesting question, breaking all safety guards, could
this be extended by casting a function which takes a uint64 (`func
myFunc(uint64)`) to a function which takes two uint32's? (`*(*func(uint32,
uint32)(unsafe.Pointer(ptrToMyFuncValue)))`)
The latter is something I do not nescessarily desire an answer to, but it
does make me curious.
--
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.
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/2975445d-69ff-46fe-bc44-3cc4bb515fa8n%40googlegroups.com.