Возврат нескольких значений из функции wasm
У меня есть TCP-сервер Golang, работающий локально и подключенный к модулю wasm. В настоящее время я могу вернуть одно значение из функции wasm. В этом блоге я заметил, что должно быть возможно возвращать несколько значений, а не одно. Однако на моем TCP-сервере Go я не получаю ответа от функции wasm.
Вот как я сделал это для возврата одного значения, и он отлично работает:
// Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> *mut u8 {
...
let newptr = get_ptr();
newptr
}
На сервере Go:
// Go code to connect to wasm modules and get access to the returned value
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
newPtr, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
ptr := newPtr.(int32)
Вот как я пытаюсь вернуть несколько значений из функции wasm:
// Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> (*mut u8, i32) {
...
let newptr = get_ptr();
let newlength = get_length();
(newptr, newlength)
}
На сервере Go я добавил следующую строку кода:
wasmtime.NewConfig().SetWasmMultiValue(true)
А в остальном все как раньше:
/* Go code to connect to wasm modules and get access to the returned value */
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
result, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
res := result.([]wasmtime.Val)
Я компилирую модули wasm, используя
cargo wasi build
команда, и она компилируется нормально. Но при отправке запроса на сервер Go, который обращается к модулям wasm, я получаю сообщение об ошибке
got 2 expected 3 arguments
. Я не понимаю, каким должен быть третий аргумент.