https://mercari.connpass.com/event/101178/
ϑϩϯτΤϯυͰGo͍ͨ͠!!Goಓ #3 LTେձGo Takagi@shimastripe
View Slide
✦ ໊લ• ߴ ߽✦ େֶ• ౦ژۀେֶ M2✴ ϦόʔεΤϯδχΞϦϯάϓϩάϥϜཧղʹؔ͢ΔݚڀγςϚε✦ ීஈ• iOS / ϑϩϯτΤϯυपΓ͕جຊ͖Ͱ͢✦ SNS• GitHub : @shimastripe• Twitter : @shimastriper• Blog : https://shimastripe.goat.me• KyashID: rootࣗݾհ
Goಓɺ໘ന͔ͬͨ!!͔ͤͬͩ͘͠࠷৽ͷGoࣄ৮ͬͯΈ͍ͨ
WebAssemblyGo 1.11 adds an experimental port to WebAssembly.
✦ ϑϩϯτ(ϒϥβ)Ͱಈ͘όΠφϦ• ϝΠϯjsͰਏ͔ͬͨύϑΥʔϚϯεΛͳΜͱ͔͢Δ• αΠζখ͍͞ɺಡΈࠐΈվળ✦ ଟ࠼ͳݴޠ͔ΒੜͰ͖Δ• C/C++/Rust/Go/etc.✴ WebΛλʔήοτʹίϯύΠϧ͢ΔΠϝʔδ✴ ࠓ·ͰJavaScriptʹม͢ΔࢼΈ͕ଟ✤ Scala.jsͱ͔GopherJSͱ͔Web Assembly
✦ ͋͘·ͰϝΠϯܭࢉߴԽ (ܭࢉ + file size)• ήʔϜͱ͔WebGL ͕͠Β͘ओ✦ DOMૢ࡞Ͱ͖ͳ͍ (ࠓͷॴ?)• GoͰWebAssembly͔ΒJSͷؔΛίʔϧ (import "syscall/js")• DOM, EventListenerΛҰԠर͑Δ✦ طଘͷϥΠϒϥϦͱͷ݉Ͷ߹͍• JSϑϨʔϜϫʔΫ͕ੵΈ্͛ͨࢿ࢈؆୯ʹख์ͤͳ͍✦ όΠτίʔυ• ؆қಡԽʹͳΔ͔!!ۜͷؙ͔? (JSΛશͯஔ͖͑Δ???)
✦ Document• Β͍͠doc·ͩͳ͍• https://github.com/golang/go/wiki/WebAssembly• αϯϓϧίʔυ͕͞ΕͯΔ✦ͱΓ͋͑ͣ$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.html$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.js```main.gofunc main() {fmt.Println(“Hello WASM!!”)}```
Hello WASM !!$ GOOS=js GOARCH=wasm go build -o test.wasm main.go$ open wasm_exec.htmlGoͷඪ४ग़ྗ͕console.log͞ΕΔ
✦ JS→Gomain͔͠·ͩݺͳ͍?• wasm_exec.js ্Ͱrun(main)͔͠ఆٛ͞Ε͍ͯͳ͍✴ JSଆͷ͔͠Εͳ͍✦ JS→GoଆʹͤΔ?• jsͷGo InstanceͷargvʹΛೖΕΔ✴ os.Args() ͔Βर͑Δ✴ ڥม͍͚Δ✦ Go→JSʹͤΔ?• os.Stdoutʹग़ͨ͠Βconsole.log͞ΕΔ͜ͱ͔͠ݟͨΒͳ͍…• Go͔ΒJSΛcallͯ͠eventListenerʹؔΛηοτͰ͖ΔExperimental: ͨͿΜ࠷ॳʹͿͪ͋ͨΔ(ͬͨ)͜ͱ
✦ wasm_exec.js Λ֦ு• console.log ͍ͯͨ͠ՕॴΛDOMʹॻ͖ࠐ·ͤΔ✦ Goଆ (shimabot.NotifyTrainInformation())• ࣗͷChatBotͷ౦ٸઢӡߦεΫϦϓτΛbuild✴ ఆظతʹݟʹߦͬͯిं͕ࢭ·ͬͯͳ͍͔֬ೝ• JSଆͷnotify()ؔʹొ͢Δ͏গ͠…writeSync(fd, buf) {outputBuf += decoder.decode(buf);const nl = outputBuf.lastIndexOf("\n");if (nl != -1) {const elm = document.querySelector("#wrapper");let div = document.createElement('div');div.textContent = outputBuf.substr(0, nl);elm.appendChild(div);}
✦ ࣮ߦͰ͖ͨ!!• CORS֎͞ͳ͍ͱ ͍͚ͳ͔ͬͨ• ґଘϥΠϒϥϦͰ Ϗϧυࣦഊ͕݁ߏ͋Γ…✦ ͬͯΈͯ• APIϦΫΤετ͘Β͍ͳΒׂͱͦͷ··ಈ͔ͤΔ• JSଆ͔ΒGoͷؔΛࢦఆͯ͠ݺΔΑ͏ʹͳΕศརϒϥβ্ͰࣗલGoίʔυͷ࣮ߦ
✦ Web Assembly• ϋΠύϑΥʔϚϯε͕ٻΊΒΕΔΑ͏ʹͳͬͨ WebΛࢧ͑ΔͨΊͷόΠφϦΛ༻͍ͨߴԽ✦ Go Web Assembly• ·ͩࢼݧ of ࢼݧஈ֊ɻ• GoଆͷؔΛׂͱ؆୯ʹϒϥβͰ࣮ߦͰ͖ͨ• CLIͰ࡞͖ͬͯͨػೳΛ্ख͘׆༻Ͱ͖ͨΓ͠ͳ͍͔?·ͱΊ͜Ε͔ΒͷAPI࣍ୈ͚ͩͲɺ͍ΖΜͳ͍ํͰ͖ͦ͏!!
✦ Wiki• https://github.com/golang/go/wiki/WebAssembly✦ Tutorial• https://www.youtube.com/watch?v=4kBvvk2Bzis• https://www.youtube.com/watch?v=iTrx0BbUXI4✦ Blog• https://blog.gopheracademy.com/advent-2017/go-wasm/• https://www.kabuku.co.jp/developers/go-to-webassembly• http://iqeiq.hatenablog.com/entry/2017/12/02/033238• https://yhara.jp/2017/12/01/webassemblyࢀߟࢿྉ (Ҿ༻)