WebAssembly היא אחת הטכנולוגיות המודרניות המיועדות להפעלת שפות נוספות בדפדפן עם יכולת פעולה הדדית של Javascript.
WebAssembly (WASM) הוא פורמט הוראות בינארי בלתי תלוי בפלטפורמה עבור מכונות וירטואליות מבוססות מחסניות שתוכננו כ יעד קומפילציה נייד לשפות תכנות לרוץ בסביבות מאפשרות (כלומר, האינטרנט והשרת אפליקציות).
עם WASM, אתה יכול להריץ מספר שפות תכנות, כולל Go, בדפדפן שלך ולרתום את תכונות השפה. כמו כן, פעל בשיתוף פעולה עם Javascript באינטרנט.
תחילת העבודה עם WebAssembly ב-Go
Go מספקת תמיכה מהשורה הראשונה לשימוש ב-WebAssembly ביישומי ה-Go שלך, אתה רק צריך לבצע כמה תצורות ולהדר קוד Go לתוך WebAssembly.
תצטרך לבצע כמה הגדרות כדי להעביר את קוד ה-Go שלך ל-WebAssembly. תצטרך לשנות את ארכיטקטורת ה-Go שלך GOARCH משתנה סביבה ל wasm ומערכת ההפעלה Go GOOS משתנה ל js.
הפעל פקודה זו בטרמינל של ספריית העבודה שלך כדי לבצע הגדרות אלה.
הגדר GOARCH=wasm GOOS=js
השלב הבא הוא להעביר את קוד ה-Go שלך ל-WebAssembly .wasm קוֹבֶץ. הפעל את הפקודה הזו כדי להעתיק את שלך main.go קובץ לקובץ בשם lib.wasm
לך לבנות -o lib.wasm main.go
בהפעלת הפקודה, תמצא א lib.wasm בספריית העבודה שלך.
עליך להעתיק את קובץ ה-WebAssembly הנלווה להתקנת ה-Go לתוך ספריית העבודה שלך כדי להפעיל את קובץ ה-WebAssembly עם NodeJS בדף אינטרנט.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
הפקודה מעתיקה את ה wasm_exec.js הקובץ לספריית העבודה שלך ומשמש כנקודת הכניסה ליישום שלך.
כעת אתה יכול להשתמש ב- wasm_exec.js סקריפט לביצוע קבצי ה-WASM שלך עם Go and make DOM API שיחות.
node wasm_exec.js main.wasm
הפעלת שרת אינטרנט כדי לארח את האתר
הוסף קוד זה ממחברי Go לקובץ HTML בספריית העבודה שלך כדי ליצור זרם נתונים של WebAssembly עם instantiateStreaming שיטה.
זכויות יוצרים 2018 The Go Authors. כל הזכויות שמורות.
השימוש בקוד מקור זה כפוף לרישיון
בסגנון BSD שניתן למצוא בקובץ LICENSE.
"utf-8" />לך wasm
קוד ה-HTML הוא מ-Go Authors, ליצירת זרם WebAssembly המחבר את קוד ה-Go שלך לדף האינטרנט.
הפעלת שרת אינטרנט כדי להפעיל את הדף
אתה תעשה הגדר את השרת עם http חֲבִילָה. ייבא את http החבילה ואת עֵץ חבילה לרישום שגיאות אפשריות למסוף.
יְבוּא (
"עֵץ"
"נטו/http"
)
אתה יכול להצהיר על משתנים עבור כתובת השרת והספרייה של הקבצים שברצונך להגיש בכתובת.
var (
serverAddr = ":8080"
ספרייה = "."
)
אתה יכול להשתמש ב שרת קבצים שיטת ה http חבילה לשרת קבצים בספרייה שצוינה. ה שרת קבצים השיטה לוקחת את הספרייה ומחזירה מופע של שרת קבצים.
funcרָאשִׁי() {
serveFiles := http. FileServer (http. דיר (ספרייה))
אם טעות := http. ListenAndServe (serverAddr, serveFiles); טעות != אֶפֶס {
עֵץ. פתאלן (שגיאה)
}
}
בתוך ה רָאשִׁי הפונקציה, הכרזת על משתנה מופע של שרת קבצים שישרת את הקבצים בספריית השורש. ה ListenAndServe השיטה משרתת את הקבצים בספרייה שצוינה ביציאה שצוינה.
WebAssembly פונקציות ב-Go
Go מספקת פונקציונליות לקריאה לפונקציות JS ואינטראקציה עם ה-DOM ב- syscall/js חֲבִילָה.
ה js החבילה מספקת גישה לסביבות מארח WebAssembly ב- js/wasm ארכיטקטורה. יהיה עליך להגדיר את סביבת הפיתוח שלך ל- GOARCH=wasm GOOS=js כדי לגשת לחבילה ולהשתמש בה.
אתה יכול להשתמש בשיטות השונות בחבילה כדי ליצור אינטראקציה עם דף האינטרנט שלך. הנה איך אתה יכול לרשום פונקציות עם js חֲבִילָה.
// הגדרת פונקציה
funcהדפס(זה js. ערך, i []js. ערך)מִמְשָׁק{} {
לַחֲזוֹר js. ValueOf (i[:])
}
ה הדפס הפונקציה ברישום כפונקציית התקשרות חוזרת תוציא את הנתונים המועברים לפונקציה במסוף הדפדפן.
אתה יכול לרשום פונקציות התקשרות חזרה עם מַעֲרֶכֶת שיטת ה גלוֹבָּלִי שיטת ה js חֲבִילָה. ה מַעֲרֶכֶת השיטה לוקחת את מזהה הפונקציה ומופע של פונקציית התקשרות חזרה.
funcרישום פונקציות Callback() {
js. Global().Set("הדפס", js. FuncOf(הדפס))
}
ה רישום פונקציות Callback השיטה רושמת את הדפס לתפקד כפונקציית התקשרות חזרה שבה תוכל להשתמש במסוף הדפדפן.
WebAssembly היא תכונה נסיונית בשפות רבות, כולל Go
תכונות WebAssembly הן חדשות יחסית בשפות רבות, במיוחד מאז שהשפה הפכה לאחרונה לתקן W3C. ה js החבילה היא ניסיונית, והחבילה פטורה מהבטחת התאימות של Go.