Go lang 실습
golang wasm - 1
컴닥
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로 작성된 함수를 실행하는 것은 성공.
그럼 그 반대는...
반응형