/ / Giới thiệu về WebAssembly trong Go

Giới thiệu về WebAssembly trong Go

WebAssugging là một trong những công nghệ hiện đại được thiết kế để chạy nhiều ngôn ngữ hơn trên trình duyệt với khả năng tương tác Javascript.


WebAssugging (WASM) là một định dạng hướng dẫn nhị phân, độc lập với nền tảng dành cho các máy ảo dựa trên ngăn xếp được thiết kế làm mục tiêu biên dịch di động cho các ngôn ngữ lập trình để chạy trên các môi trường hỗ trợ (ví dụ: ứng dụng web và máy chủ).

Với WASM, bạn có thể chạy một số ngôn ngữ lập trình, bao gồm Go, trên trình duyệt của mình và khai thác các tính năng của ngôn ngữ đó. Ngoài ra, tương tác với Javascript trên web.


Bắt đầu với WebAssembly trong Go

Go cung cấp dịch vụ hỗ trợ hạng nhất để sử dụng WebAssugging trong các ứng dụng Go của bạn, bạn chỉ cần tạo một vài cấu hình và biên dịch mã Go thành WebAssembly.

Bạn sẽ cần thực hiện một số cấu hình để chuyển mã Go của mình sang WebAssugging. Bạn sẽ phải thay đổi kiến ​​trúc Go của mình MỤC ĐÍCH biến môi trường thành đã m và hệ điều hành Go ĐÚNG biến thành js.

Chạy lệnh này trong thiết bị đầu cuối của thư mục làm việc của bạn để thực hiện các cấu hình này.

 Set GOARCH=wasm GOOS=js 

Bước tiếp theo là chuyển mã Go của bạn thành WebAssembly .đã m tập tin. Chạy lệnh này để dịch mã của bạn chính.go tập tin vào một tập tin có tên lib.wasm

 go build -o lib.wasm main.go

Khi chạy lệnh, bạn sẽ tìm thấy một lib.wasm trong thư mục làm việc của bạn.

Bạn cần sao chép tệp WebAssugging đi kèm với bản cài đặt Go của bạn vào thư mục làm việc để thực thi tệp WebAssugging với NodeJS trên một trang web.

 cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

Lệnh sao chép wasm_exec.js tệp vào thư mục làm việc của bạn và đóng vai trò là điểm vào cho ứng dụng của bạn.

Bây giờ bạn có thể sử dụng wasm_exec.js tập lệnh để thực thi các tệp WASM của bạn bằng Go và thực hiện lệnh gọi API DOM.

 node wasm_exec.js main.wasm

Bắt đầu một máy chủ web để lưu trữ trang web

Thêm mã này từ tác giả Go vào tệp HTML trong thư mục làm việc của bạn để khởi tạo luồng dữ liệu WebAssembly với khởi tạoTruyền phát phương pháp.

 <!DOCTYPE html>
<!--
Copyright 2018 The Go Authors. All rights reserved.
Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file.
-->

<html>
<head>
    <meta charset="utf-8" />
    <title>Go wasm</title>
</head>

<body>
<script src="wasm_exec.js"></script>

<script>
    if (!WebAssembly.instantiateStreaming) {
        
        WebAssembly.instantiateStreaming = async (resp, importObject) => {
            const source = await (await resp).arrayBuffer();
            return await WebAssembly.instantiate(source, importObject);
        };
    }

    const go = new Go();

    let mod, inst;

    WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then(
        result => {
            mod = result.module;
            inst = result.instance;
            document.getElementById("runButton").disabled = false;
        }
    );

    async function run() {
        await go.run(inst);
        inst = await WebAssembly.instantiate(mod, go.importObject);
    }
</script>

<button onClick="run();" id="runButton" disabled>Run</button>
</body>
</html>

Mã HTML là từ Go Authors, để khởi tạo luồng WebAssembly kết nối mã Go của bạn với trang web.

Bắt đầu một máy chủ web để chạy trang

Bạn sẽ thiết lập máy chủ với http bưu kiện. Nhập khẩu http gói và đăng nhập gói để ghi các lỗi có thể xảy ra vào bảng điều khiển.

 import (
    "log"
    "net/http"
)

Bạn có thể khai báo các biến cho địa chỉ máy chủ và thư mục của các tệp bạn muốn phục vụ trên địa chỉ.

 var (
    serverAddr = ":8080"
    directory = "."
)

Bạn có thể dùng Máy chủ tập tin phương pháp của http gói để phục vụ các tệp trong một thư mục được chỉ định. Các Máy chủ tập tin phương thức lấy trong thư mục và trả về một phiên bản máy chủ tệp.

 func main() {
    serveFiles := http.FileServer(http.Dir(directory))
    if err := http.ListenAndServe(serverAddr, serveFiles); err != nil {
        log.Fatalln(err)
}
}

bên trong chủ yếu chức năng, bạn đã khai báo một biến cá thể máy chủ tệp để phục vụ các tệp trong thư mục gốc. Các lắng nghe và phục vụ phương thức phục vụ các tệp trong thư mục được chỉ định trên cổng được chỉ định.

kết quả tải WASM trên trình duyệt

Chức năng WebAssembly trong Go

Go cung cấp chức năng gọi các hàm JS và tương tác với DOM trong gói syscall/js.

Các js gói cung cấp quyền truy cập vào môi trường máy chủ WebAssugging trên js/wasm ngành kiến ​​​​trúc. Bạn sẽ cần thiết lập môi trường phát triển của mình theo GOARCH=wasm GOOS=js để truy cập và sử dụng gói.

xem trước tài liệu gói js

Bạn có thể sử dụng các phương pháp khác nhau trong gói để tương tác với trang web của mình. Đây là cách bạn có thể đăng ký các chức năng với js bưu kiện.

 
func print(this js.Value, i []js.Value) interface{} {
    return js.ValueOf(i[:])
}

Các in chức năng khi đăng ký dưới dạng chức năng gọi lại sẽ xuất dữ liệu được truyền cho chức năng trong bảng điều khiển trình duyệt.

Bạn có thể đăng ký chức năng gọi lại với Bộ phương pháp của Toàn cầu phương pháp của js bưu kiện. Các Bộ phương thức nhận định danh hàm và một thể hiện hàm gọi lại.

 func RegisterCallbackFunctions() {
    js.Global().Set("print", js.FuncOf(print))
}

Các RegisterCallbackChức năng phương pháp đăng ký các in hoạt động như một chức năng gọi lại mà bạn có thể sử dụng trong bảng điều khiển trình duyệt.

WebAssugging là một tính năng thử nghiệm trong nhiều ngôn ngữ, bao gồm cả Go

Các tính năng của WebAssembly tương đối mới đối với nhiều ngôn ngữ, đặc biệt là khi ngôn ngữ này gần đây đã trở thành tiêu chuẩn của W3C. Các js gói đang thử nghiệm và gói được miễn khỏi lời hứa tương thích với Go.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *