-
golang wasm - 1Go lang 실습 2024. 3. 5. 16:31반응형
웹어셈블리 (WebAssembly)
https://namu.wiki/w/WebAssembly
https://ko.wikipedia.org/wiki/%EC%9B%B9%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC
https://d2.naver.com/helloworld/8786166
https://reintech.io/blog/a-guide-to-gos-syscall-js-package-go-and-webassembly
https://tech.kakao.com/2021/05/17/frontend-growth-08/
wasm 사용 준비
go 1.11 이후..
C:\MyProjects\go_wasm>go version go version go1.22.0 windows/amd64
GOROOT
C:\MyProjects\go_wasm>go env GOROOT C:\Program Files\Go
GOROOT\misc\wasm\wasm_exec.js
파일 필요. 작업폴더로 복사할 것."C:\Program Files\Go\misc\wasm\" 폴더 확인
C:\MyProjects\go_wasm>dir "C:\Program Files\Go\misc\wasm\" C 드라이브의 볼륨: OS 볼륨 일련 번호: B457-0D6A C:\Program Files\Go\misc\wasm 디렉터리 2024-02-29 오후 03:33 <DIR> . 2024-02-29 오후 03:33 <DIR> .. 2024-02-02 오후 06:09 603 go_js_wasm_exec 2024-02-02 오후 06:09 1,342 go_wasip1_wasm_exec 2024-02-02 오후 06:09 1,303 wasm_exec.html 2024-02-02 오후 06:09 16,687 wasm_exec.js 2024-02-02 오후 06:09 1,151 wasm_exec_node.js 5개 파일 21,086 바이트 2개 디렉터리 286,364,139,520 바이트 남음
wasm 사용
main.go 작성
package main import "syscall/js" func main() { println("Wasm loaded.") // 웹 브라우저 콘솔로 출력됩니다. // js.Global()로 Javascript의 Global 네임스페이스에 엑세스할 수 있습니다. js.Global().Get("console").Call("log", "Hello World!") alert := js.Global().Get("alert") alert.Invoke("Hello Wasm!") }
main.go 컴파일
SET GOOS=js& SET GOARCH=wasm& go build -o main.wasm main.go
고 언어에서는 다른 OS로의 컴파일을 지원...
헉 main.wasm 크기가 1547KB
index.html 작성
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Go WebAssembly Example</title> </head> <body> <script src="./static/wasm_exec.js"></script> <script> async function runWasm() { const go = new Go(); const result = await WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject); go.run(result.instance); } runWasm(); </script> </body> </html>
서버 작동
본인은 VS 코드 익스텐션 이용.
https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer결과
golang에서 js 네임스페이스에 접속해서 JS로 작성된 함수를 실행하는 것은 성공.
그럼 그 반대는...반응형