Go'da WebAssembly'a Giriş

Go'da WebAssembly'a Giriş
Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz. Devamını oku.

WebAssembly, Javascript birlikte çalışabilirliği ile tarayıcıda daha fazla dil çalıştırmak için tasarlanmış modern teknolojilerden biridir.





WebAssembly (WASM), etkinleştirme ortamlarında (ör. web ve sunucu uygulamaları) çalışacak programlama dilleri için taşınabilir bir derleme hedefi olarak tasarlanmış yığın tabanlı sanal makineler için platformdan bağımsız, ikili bir talimat biçimidir.





WASM ile tarayıcınızda Go dahil olmak üzere birçok programlama dilini çalıştırabilir ve dilin özelliklerinden yararlanabilirsiniz. Ayrıca, web üzerinde Javascript ile birlikte çalışın.





Go'da WebAssembly'a Başlarken

Go, Go uygulamalarınızda WebAssembly'ı kullanmak için birinci sınıf destek sağlar, yalnızca birkaç yapılandırma yapmanız ve Go kodunu WebAssembly'da derlemeniz gerekir.

Go kodunuzu WebAssembly'a aktarmak için birkaç yapılandırma yapmanız gerekecek. Go mimarinizi değiştirmeniz gerekecek GOARCH ortam değişkeni wasm ve Go işletim sistemi GOOS değişken js .



mac'teki mesaj mesaj göndermiyor

Bu yapılandırmaları yapmak için çalışma dizininizin terminalinde bu komutu çalıştırın.

 Set GOARCH=wasm GOOS=js  

Bir sonraki adım, Go kodunuzu bir WebAssembly'ye aktarmaktır. .wasm dosya. aktarmak için bu komutu çalıştırın ana.git adlı bir dosyaya dosya lib.wasm





 go build -o lib.wasm main.go 

Komutu çalıştırırken, bir lib.wasm çalışma dizininizde.

WebAssembly dosyasını bir web sayfasında NodeJS ile çalıştırmak için, Go kurulumunuzla birlikte gelen WebAssembly dosyasını çalışma dizininize kopyalamanız gerekir.





birinin seni snapchatte engellediğini nasıl anlarsın
 cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" . 

komut kopyalar wasm_exec.js dosyasını çalışma dizininize kaydeder ve uygulamanız için giriş noktası görevi görür.

şimdi kullanabilirsiniz wasm_exec.js WASM dosyalarınızı Go ve make ile yürütmek için komut dosyası DOM API'si çağrılar.

 node wasm_exec.js main.wasm 

Web Sitesini Barındırmak İçin Bir Web Sunucusu Başlatma

ile bir WebAssembly veri akışının örneğini oluşturmak için Go yazarlarından bu kodu çalışma dizininizdeki bir HTML dosyasına ekleyin. akış başlatma yöntem.

 <!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 kodu, Go kodunuzu web sayfasına bağlayan bir WebAssembly akışını başlatmak için Go Yazarlarından alınmıştır.

Sayfayı Çalıştırmak İçin Bir Web Sunucusu Başlatma

yapacaksın ile sunucuyu kurun http paket . içe aktar http paket ve kayıt olası hataları konsola kaydetmek için paket.

 import ( 
    "log"
    "net/http"
)

Adres üzerinde hizmet vermek istediğiniz dosyaların sunucu adresi ve dizini için değişken tanımlayabilirsiniz.

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

kullanabilirsiniz Dosya sunucusu yöntemi http belirli bir dizindeki dosyaları sunmak için paket. bu Dosya sunucusu yöntem dizini alır ve bir dosya sunucusu örneği döndürür.

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

İçinde ana işlevi, kök dizindeki dosyalara hizmet vermek için bir dosya sunucusu örneği değişkeni bildirdiniz. bu Dinle ve Sun yöntem, belirtilen bağlantı noktasında belirtilen dizindeki dosyalara hizmet eder.

  WASM'nin tarayıcıya yüklenmesinin sonucu

Go'da WebAssembly İşlevleri

Go, JS işlevlerini çağırmak ve DOM ile etkileşimde bulunmak için işlevsellik sağlar. sistem çağrısı/js paket.

bu js paketi, WebAssembly ana bilgisayar ortamlarına erişim sağlar. js/wasm mimari. Geliştirme ortamınızı şu şekilde ayarlamanız gerekir: GOARCH=wasm GOOS=js pakete erişmek ve kullanmak için.

  js paketi doc önizleme

Web sayfanızla etkileşim kurmak için paketteki çeşitli yöntemleri kullanabilirsiniz. İşlevleri şu şekilde kaydedebilirsiniz: js paket.

69FFFA8BC9B6474F8AD847FF4FDFFD3434E1B467

bu Yazdır işlevi, bir geri arama işlevi olarak kayıt sırasında tarayıcı konsolundaki işleve iletilen verilerin çıktısını alacaktır.

ile geri arama fonksiyonlarını kaydedebilirsiniz. Ayarlamak yöntemi küresel yöntemi js paket. bu Ayarlamak yöntem, işlev tanımlayıcısını ve bir geri arama işlevi örneğini alır.

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

bu RegisterCallbackFonksiyonları yöntemi kaydeder Yazdır tarayıcı konsolunda kullanabileceğiniz bir geri arama işlevi olarak işlev görür.

android 2015 için en iyi metin uygulamaları

WebAssembly, Go Dahil Birçok Dilde Deneysel Bir Özelliktir

WebAssembly özellikleri, özellikle dil yakın zamanda bir W3C standardı haline geldiğinden beri, birçok dil için nispeten yenidir. bu js paket deneyseldir ve paket Go uyumluluk taahhüdünden muaftır.