WebAssembly adalah salah satu teknologi modern yang dirancang untuk menjalankan lebih banyak bahasa di browser dengan interoperabilitas Javascript.
WebAssembly (WASM) adalah format instruksi biner platform-independen untuk mesin virtual berbasis stack yang dirancang sebagai target kompilasi portabel untuk bahasa pemrograman agar berjalan di lingkungan yang memungkinkan (mis., web dan server aplikasi).
Dengan WASM, Anda dapat menjalankan beberapa bahasa pemrograman, termasuk Go, di browser Anda dan memanfaatkan fitur bahasa tersebut. Juga, interoperasikan dengan Javascript di web.
Memulai Dengan WebAssembly di Go
Go memberikan dukungan kelas satu untuk menggunakan WebAssembly di aplikasi Go Anda, Anda hanya perlu membuat beberapa konfigurasi dan mengompilasi kode Go ke dalam WebAssembly.
Anda harus membuat beberapa konfigurasi untuk mengubah kode Go Anda menjadi WebAssembly. Anda harus mengubah arsitektur Go Anda
GOARCH variabel lingkungan ke wasm dan sistem operasi Go GOOS variabel ke js.Jalankan perintah ini di terminal direktori kerja Anda untuk membuat konfigurasi ini.
Tetapkan GOARCH=wasm GOOS=js
Langkah selanjutnya adalah mengubah kode Go Anda menjadi WebAssembly .wasm mengajukan. Jalankan perintah ini untuk mengubah file Anda main.go file ke file bernama lib.wasm
pergi build -o lib.wasm main.go
Saat menjalankan perintah, Anda akan menemukan a lib.wasm di direktori kerja Anda.
Anda perlu menyalin file WebAssembly yang menyertai instalasi Go Anda ke direktori kerja Anda untuk mengeksekusi file WebAssembly dengan NodeJS di halaman web.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Perintah menyalin wasm_exec.js file ke direktori kerja Anda dan berfungsi sebagai titik masuk ke aplikasi Anda.
Anda sekarang dapat menggunakan wasm_exec.js skrip untuk mengeksekusi file WASM Anda dengan Go and make API DOM panggilan.
node wasm_exec.js main.wasm
Memulai Server Web untuk Menghosting Situs Web
Tambahkan kode ini dari penulis Go ke file HTML di direktori kerja Anda untuk membuat contoh aliran data WebAssembly dengan instantiateStreaming metode.
Hak Cipta 2018 The Go Authors. Semua hak dilindungi undang-undang.
Penggunaan kode sumber ini diatur oleh lisensi
gaya BSD yang dapat ditemukan di file LICENSE.
"utf-8" />Pergi wasm
Kode HTML berasal dari Go Authors, untuk membuat contoh aliran WebAssembly yang menghubungkan kode Go Anda ke halaman web.
Memulai Server Web untuk Menjalankan Halaman
Anda akan mengatur server dengan http kemasan. Impor http paket dan catatan paket untuk mencatat kemungkinan kesalahan ke konsol.
impor (
"catatan"
"net/http"
)
Anda dapat mendeklarasikan variabel untuk alamat server dan direktori file yang ingin Anda layani di alamat tersebut.
var (
serverAddr = ":8080"
direktori = "."
)
Anda dapat menggunakan FileServer metode dari http paket untuk melayani file dalam direktori tertentu. Itu FileServer metode mengambil di direktori dan mengembalikan instance server file.
fungsiutama() {
serveFiles := http. FileServer (http. Dir (direktori))
jika salah := http. ListenAndServe (serverAddr, serveFiles); salah!= nol {
catatan. Fataln (err)
}
}
Dalam utama fungsi, Anda mendeklarasikan variabel instan server file untuk melayani file di direktori root. Itu Dengarkan Dan Sajikan metode melayani file di direktori yang ditentukan pada port yang ditentukan.
Fungsi WebAssembly di Go
Go menyediakan fungsionalitas untuk memanggil fungsi JS dan berinteraksi dengan DOM di syscall/js kemasan.
Itu js paket menyediakan akses ke lingkungan host WebAssembly di js/wasm Arsitektur. Anda harus mengatur lingkungan pengembangan Anda ke GOARCH=wasm GOOS=js untuk mengakses dan menggunakan paket.
Anda dapat menggunakan berbagai metode dalam paket untuk berinteraksi dengan halaman web Anda. Inilah cara Anda dapat mendaftarkan fungsi dengan js kemasan.
// definisi fungsi
fungsimencetak(ini js. Nilai, saya []js. Nilai)antarmuka{} {
kembali js. NilaiDari (i[:])
}
Itu mencetak fungsi pada pendaftaran sebagai fungsi panggilan balik akan menampilkan data yang diteruskan ke fungsi di konsol browser.
Anda dapat mendaftarkan fungsi panggilan balik dengan Mengatur metode dari Global metode dari js kemasan. Itu Mengatur metode mengambil pengidentifikasi fungsi dan instance fungsi panggilan balik.
fungsiDaftarkanCallbackFunctions() {
js. Global().Set("mencetak", js. Fungsi(mencetak))
}
Itu DaftarkanCallbackFunctions metode mendaftarkan mencetak berfungsi sebagai fungsi panggilan balik yang dapat Anda gunakan di konsol browser.
WebAssembly Adalah Fitur Eksperimental dalam Banyak Bahasa, Termasuk Go
Fitur WebAssembly relatif baru untuk banyak bahasa, terutama karena bahasa tersebut baru-baru ini menjadi standar W3C. Itu js paket bersifat eksperimental, dan paket dikecualikan dari janji kompatibilitas Go.