Closed as not planned
Closed as not planned
Description
Right now, compiling the following piece of Go code:
package main
func main() {
println("hello")
println("1+3=", MyAdd(1, 3))
}
//export MyAdd
func MyAdd(i, j int32) int32 {
return i + j
}
like so:
$> GOOS=js GOARCH=wasm go build -o foo.wasm ./main.go
will produce the following foo.wasm
module:
$> wasm-objdump -h ./foo.wasm
foo.wasm: file format wasm 0x1
Sections:
Type start=0x0000000e end=0x00000048 (size=0x0000003a) count: 10
Import start=0x0000004e end=0x000000ce (size=0x00000080) count: 6
Function start=0x000000d4 end=0x0000042c (size=0x00000358) count: 854
Table start=0x00000432 end=0x00000437 (size=0x00000005) count: 1
Memory start=0x0000043d end=0x00000442 (size=0x00000005) count: 1
Global start=0x00000448 end=0x0000047b (size=0x00000033) count: 10
Export start=0x00000481 end=0x0000048f (size=0x0000000e) count: 2
Elem start=0x00000495 end=0x00000acf (size=0x0000063a) count: 1
Code start=0x00000ad5 end=0x000a3b7a (size=0x000a30a5) count: 854
Data start=0x000a3b80 end=0x001290fd (size=0x0008557d) count: 7
Custom start=0x00129103 end=0x0012f117 (size=0x00006014) "name"
especially:
$> wasm-objdump -j export -x ./foo.wasm
foo.wasm: file format wasm 0x1
Section Details:
Export:
- func[750] <_rt0_wasm_js> -> "run"
- memory[0] -> "mem"
ie: the user can not control what is exported.
the recommended way to export something currently, is to use js.NewCallback
.
this is - mainly - because one needs to setup a few things for the Go and js runtimes to cooperate nicely together.
I would argue that, in the same spirit than when one compiles the same main.go
file with -buildmode=c-shared
, it should be possible to achieve the same thing for GOOS=xyz GOARCH=wasm
, and only export what is //export
-ed.
initialization of the runtime(s) would be performed via the wasm module's start function.
(this is a re-hash of neelance/go#22.)