Go میں WebAssembly کا تعارف

Go میں WebAssembly کا تعارف
آپ جیسے قارئین MUO کو سپورٹ کرنے میں مدد کرتے ہیں۔ جب آپ ہماری سائٹ پر لنکس کا استعمال کرتے ہوئے خریداری کرتے ہیں، تو ہم ملحق کمیشن حاصل کر سکتے ہیں۔ مزید پڑھ.

WebAssembly جدید ٹیکنالوجیز میں سے ایک ہے جو Javascript انٹرآپریبلٹی کے ساتھ براؤزر پر مزید زبانیں چلانے کے لیے بنائی گئی ہے۔





WebAssembly (WASM) اسٹیک پر مبنی ورچوئل مشینوں کے لیے ایک پلیٹ فارم سے آزاد، بائنری انسٹرکشن فارمیٹ ہے جسے فعال کرنے والے ماحول (یعنی ویب اور سرور ایپس) پر چلنے کے لیے پروگرامنگ زبانوں کے لیے پورٹیبل کمپلیشن ہدف کے طور پر ڈیزائن کیا گیا ہے۔





WASM کے ساتھ، آپ اپنے براؤزر پر گو سمیت کئی پروگرامنگ زبانیں چلا سکتے ہیں اور زبان کی خصوصیات کو بروئے کار لا سکتے ہیں۔ نیز، ویب پر جاوا اسکرپٹ کے ساتھ انٹرآپریٹ کریں۔





Go میں WebAssembly کے ساتھ شروعات کرنا

Go آپ کی Go ایپلی کیشنز میں WebAssembly استعمال کرنے کے لیے فرسٹ کلاس سپورٹ فراہم کرتا ہے، آپ کو صرف چند کنفیگریشنز بنانے اور Go کوڈ کو WebAssembly میں مرتب کرنے کی ضرورت ہے۔

آپ کو اپنے گو کوڈ کو WebAssembly میں منتقل کرنے کے لیے کچھ کنفیگریشنز کرنے کی ضرورت ہوگی۔ آپ کو اپنا گو فن تعمیر تبدیل کرنا پڑے گا۔ گوارچ کے لئے ماحولیاتی متغیر wasm اور گو آپریٹنگ سسٹم GOOS کے لیے متغیر js .



ان کنفیگریشنز کو بنانے کے لیے اس کمانڈ کو اپنی ورکنگ ڈائرکٹری کے ٹرمینل میں چلائیں۔

4FBE7ACCABB8C4C6EB45884EE9152B0E5AD513AD

اگلا مرحلہ اپنے گو کوڈ کو WebAssembly میں منتقل کرنا ہے۔ .wasm فائل اپنے منتقلی کے لیے اس کمانڈ کو چلائیں۔ main.go نام کی فائل میں فائل lib.wasm





 go build -o lib.wasm main.go 

کمانڈ چلانے پر، آپ کو ایک مل جائے گا۔ lib.wasm آپ کی ورکنگ ڈائرکٹری میں۔

ویب پیج پر NodeJS کے ساتھ WebAssembly فائل کو چلانے کے لیے آپ کو اپنی Go انسٹالیشن کے ساتھ موجود WebAssembly فائل کو اپنی ورکنگ ڈائرکٹری میں کاپی کرنے کی ضرورت ہے۔





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

کمانڈ کاپی کرتا ہے۔ wasm_exec.js آپ کی ورکنگ ڈائرکٹری میں فائل کریں اور آپ کی درخواست کے اندراج پوائنٹ کے طور پر کام کریں۔

آئی ایس او کو یو ایس بی میں کیسے لگایا جائے۔

اب آپ استعمال کر سکتے ہیں۔ wasm_exec.js گو اینڈ میک کے ساتھ آپ کی WASM فائلوں کو انجام دینے کے لیے اسکرپٹ DOM API کالز

 node wasm_exec.js main.wasm 

ویب سائٹ کی میزبانی کے لیے ویب سرور شروع کرنا

گو مصنفین کے اس کوڈ کو اپنی ورکنگ ڈائرکٹری میں ایک HTML فائل میں شامل کریں تاکہ اس کے ساتھ WebAssembly ڈیٹا اسٹریم کو تیز کیا جا سکے۔ instantiatestreaming طریقہ

 <!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) {
        // polyfill
        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); // reset instance
    }
</script>

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

HTML کوڈ Go Authors کی طرف سے ہے، ایک WebAssembly سٹریم کو شروع کرنے کے لیے جو آپ کے Go کوڈ کو ویب پیج سے جوڑتا ہے۔

صفحہ چلانے کے لیے ویب سرور شروع کرنا

آپ کریں گے۔ کے ساتھ سرور مرتب کریں۔ http پیکج . درآمد کریں۔ http پیکج اور لاگ کنسول میں ممکنہ غلطیوں کو لاگ ان کرنے کے لیے پیکیج۔

 import ( 
    "log"
    "net/http"
)

آپ سرور ایڈریس اور فائلوں کی ڈائرکٹری کے متغیرات کا اعلان کر سکتے ہیں جنہیں آپ ایڈریس پر پیش کرنا چاہتے ہیں۔

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

آپ استعمال کر سکتے ہیں۔ فائل سرور کا طریقہ http ایک مخصوص ڈائرکٹری میں فائلوں کو پیش کرنے کے لیے پیکیج۔ دی فائل سرور طریقہ ڈائرکٹری میں لے جاتا ہے اور فائل سرور کی مثال واپس کرتا ہے۔

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

میں مرکزی فنکشن، آپ نے روٹ ڈائرکٹری میں فائلوں کو پیش کرنے کے لئے فائل سرور مثال کے متغیر کا اعلان کیا۔ دی سنیں اور خدمت کریں۔ طریقہ مخصوص پورٹ پر مخصوص ڈائریکٹری میں فائلوں کو پیش کرتا ہے۔

  براؤزر پر WASM لوڈ کرنے کا نتیجہ

Go میں WebAssembly افعال

Go JS فنکشنز کو کال کرنے اور DOM کے ساتھ بات چیت کرنے کے لیے فعالیت فراہم کرتا ہے۔ syscall/js پیکج

دی js پیکیج پر WebAssembly میزبان ماحول تک رسائی فراہم کرتا ہے۔ js/wasm فن تعمیر آپ کو اپنے ترقیاتی ماحول کو ترتیب دینے کی ضرورت ہوگی۔ GOARCH=wasm GOOS=js پیکیج تک رسائی اور استعمال کرنے کے لیے۔

  js پیکیج دستاویز کا پیش نظارہ

آپ اپنے ویب پیج کے ساتھ تعامل کرنے کے لیے پیکج میں مختلف طریقے استعمال کر سکتے ہیں۔ یہاں یہ ہے کہ آپ فنکشنز کے ساتھ کیسے رجسٹر کرسکتے ہیں۔ js پیکج

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

دی پرنٹ کریں کال بیک فنکشن کے طور پر رجسٹریشن پر فنکشن براؤزر کنسول میں فنکشن کو بھیجے گئے ڈیٹا کو آؤٹ پٹ کرے گا۔

آپ کال بیک فنکشن کے ساتھ رجسٹر کر سکتے ہیں۔ سیٹ کا طریقہ عالمی کا طریقہ js پیکج دی سیٹ طریقہ فنکشن شناخت کنندہ اور کال بیک فنکشن مثال میں لیتا ہے۔

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

دی کال بیک فنکشنز کو رجسٹر کریں۔ طریقہ رجسٹر کرتا ہے پرنٹ کریں کال بیک فنکشن کے طور پر کام کرتا ہے جسے آپ براؤزر کنسول میں استعمال کر سکتے ہیں۔

WebAssembly بہت سی زبانوں میں ایک تجرباتی خصوصیت ہے، بشمول Go

WebAssembly کی خصوصیات بہت سی زبانوں کے لیے نسبتاً نئی ہیں، خاص طور پر چونکہ زبان حال ہی میں W3C کا معیار بن گئی ہے۔ دی js پیکیج تجرباتی ہے، اور پیکیج Go مطابقت کے وعدے سے مستثنیٰ ہے۔