我用go写了一个wasm,里面就是写了一个http 请求,居然不可以。
package main
import (
"fmt"
"io"
"net/http"
"syscall/js"
"time"
)
//GOOS=js GOARCH=wasm go build -o app.wasm main.go
var httpClient = &http.Client{
Timeout: time.Second * 10,
}
// 导出add函数
// func add(this js.Value, inputs []js.Value) interface{} {
// a := inputs[0].Int()
// b := inputs[1].Int()
// return a + b
// }
// 导出add函数
// func mul(this js.Value, inputs []js.Value) interface{} {
// a := inputs[0].Int()
// b := inputs[1].Int()
// return a * b
// }
func doGet(this js.Value, inputs []js.Value) any {
u := inputs[0].String()
u = strings.TrimSpace(u)
fmt.Println(u)
if len(u) == 0 {
return `{"statusCode":500,"res":""}`
}
res, err := httpClient.Get(u)
if err != nil {
fmt.Println(err)
return `{"statusCode":500,"res":"3333"}`
}
statusCode := res.StatusCode
resBytes, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return fmt.Sprintf(`{"statusCode":%v,"res":"sss"}`, statusCode)
}
return fmt.Sprintf(`{"statusCode":%v,"res":"%v"}`, statusCode, string(resBytes))
}
func doG(u string) string {
res, err := httpClient.Get(u)
if err != nil {
fmt.Println(err)
return `{"statusCode":500,"res":"3333"}`
}
statusCode := res.StatusCode
resBytes, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return fmt.Sprintf(`{"statusCode":%v,"res":"sss"}`, statusCode)
}
return fmt.Sprintf(`{"statusCode":%v,"res":"%v"}`, statusCode, string(resBytes))
}
func main() {
// 注册add函数
// js.Global().Set("add", js.FuncOf(add))
// js.Global().Set("mul", js.FuncOf(mul))
js.Global().Set("doGet", js.FuncOf(doGet))
// s := doG("https://www.zhihu.com")
// fmt.Println(s)
c := make(chan struct{}, 0)
<-c
}
然后在js里面调doGet方法,居然请求不了,哪怕不跨域。
报错: