Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Go Playgoroundで 外部パッケージ使いたい
Search
Hazumi Ichijo
October 19, 2018
Programming
7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Go Playgoroundで 外部パッケージ使いたい
Go(Un)Conference(Goあんこ)LT大会 4kg
https://gounconference.connpass.com/event/99487/
の発表資料です。
Hazumi Ichijo
October 19, 2018
More Decks by Hazumi Ichijo
See All by Hazumi Ichijo
RailsとRidgepoleの マイグレを120倍早くする
hazumirr
0
420
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
1.5k
病院の情報フローを理解して、 予約〜会計の見え方が変わった話
hazumirr
1
1.9k
Rubyのコード削除したい時 僕がやること
hazumirr
0
280
テーブル駆動テストと状態
hazumirr
5
2.2k
オンラインテストしようと思った その日に開始できる環境を目指して
hazumirr
0
1.1k
推薦によるプロダクト改善とマイクロサービスが噛み合った話
hazumirr
2
4.8k
ChatGPTで僕が知っていることまとめ
hazumirr
3
3.1k
プロダクトチームとどう 協業し分析環境を改善するか
hazumirr
2
1.6k
Other Decks in Programming
See All in Programming
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
420
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
320
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
150
継続モナドとリアクティブプログラミング
yukikurage
3
560
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
5.8k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
140
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
200
霧の中の代数的エフェクト
funnyycat
1
350
共通化で考えるべきは、実装より公開する型だった
codeegg
0
220
1B+ /day規模のログを管理する技術
broadleaf
0
140
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
350
Featured
See All Featured
Navigating Team Friction
lara
192
16k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Building the Perfect Custom Keyboard
takai
2
810
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Context Engineering - Making Every Token Count
addyosmani
9
1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
930
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Transcript
©2018 Wantedly, Inc. The Go PlaygoroundͰ ֎෦ύοέʔδ͍͍ͨ Go(Un)Conference 4kg 19.Oct.2018
- Hazumi Ichijo
©2018 Wantedly, Inc. ࣗݾհ Ұᑍ!IB[VNJSS!SFSPTU 8FC"QQMJDBUJPO&OHJOFFS (P 3BJMT 3FBDUʜ ۴࿏ߴઐஜେֶ8BOUFEMZ
©2018 Wantedly, Inc. 1MBZHSPVOE JSC SBJMTDPOTPMF ࢼ͠ʹίʔυΛಈ͔͍ͨ͠ͱ͖
©2018 Wantedly, Inc. 1MBZHSPVOE JSC SBJMTDPOTPMF ࢼ͠ʹίʔυΛಈ͔͍ͨ͠ͱ͖
֎෦ύοέʔδ͑ͳ͍ɾɾɾ
©2018 Wantedly, Inc. package main import ( "fmt" "gopkg.in/guregu/null.v3" )
func main() { fmt.Println(null.StringFrom("PlayGround")) }
©2018 Wantedly, Inc. HPHFUΛ࣮ߦ͢Δ͚ͩͰ ύοέʔδͷґଘղܾͯ͘͠Εͨͣɾɾɾʁ
©2018 Wantedly, Inc. func compileAndRun(req *request) (*response, error) { //
TODO(andybons): Add semaphore to limit number of running programs at once. tmpDir, err := ioutil.TempDir("", "sandbox") if err != nil { return nil, fmt.Errorf("error creating temp directory: %v", err) } defer os.RemoveAll(tmpDir) src := []byte(req.Body) in := filepath.Join(tmpDir, "main.go") if err := ioutil.WriteFile(in, src, 0400); err != nil { return nil, fmt.Errorf("error creating temp file %q: %v", in, err) } https://github.com/golang/playground/blob/master/sandbox.go
©2018 Wantedly, Inc. func compileAndRun(req *request) (*response, error) { //
TODO(andybons): Add semaphore to limit number of running programs at once. tmpDir, err := ioutil.TempDir("", "sandbox") if err != nil { return nil, fmt.Errorf("error creating temp directory: %v", err) } defer os.RemoveAll(tmpDir) src := []byte(req.Body) in := filepath.Join(tmpDir, "main.go") if err := ioutil.WriteFile(in, src, 0400); err != nil { return nil, fmt.Errorf("error creating temp file %q: %v", in, err) } https://github.com/golang/playground/blob/master/sandbox.go
©2018 Wantedly, Inc. ݁ہϑΝΠϧʹॻ͖ग़ͯ͠Ϗϧυ͍ͯ͠Δ͚ͩͳͷͰ ॻ͖ग़͠ઌΛ(01"5)ҎԼʹ͢Δ HPHFUΛ࣮ߦ͢Δ ͜Ε͚ͩͰ͍͚Δʁʢ͍͚ΔΘ͚͕ͳͦ͞͏ʣ
©2018 Wantedly, Inc. https://github.com/rerost/playground/compare/e07747d8d2cee6639b14ba8021d453a6b8dd9edc...master
©2018 Wantedly, Inc.
©2018 Wantedly, Inc. ಈ͍ͯ͠·ͬͨɾɾɾ
©2018 Wantedly, Inc. https://play-dot-k8s-test-219404.appspot.com/ @hazumirr
©2018 Wantedly, Inc. ͳͥ͜ͷํ๏Ͱ্ख͍͔ͬͨ͘
©2018 Wantedly, Inc. ͳͥ͏·͘ߦͬͨͷ͔ 4BOECPY͕ίʔυͷ࣮ߦ࣌ͷΈ༗ޮʹͳ͍ͬͯͨ ػೳ͕γϯϓϧͩͬͨ
©2018 Wantedly, Inc. cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32", "GOPATH=" + os.Getenv("GOPATH")}
if out, err := cmd.CombinedOutput(); err != nil { if _, ok := err.(*exec.ExitError); ok { // Return compile errors to the user. // Rewrite compiler errors to refer to progName // instead of '/tmp/sandbox1234/main.go'. errs := strings.Replace(string(out), in, progName, -1) // "go build", invoked with a file name, puts this odd // message before any compile errors; strip it. errs = strings.Replace(errs, "# command-line-arguments\n", "", 1) return &response{Errors: errs}, nil } return nil, fmt.Errorf("error building go source: %v", err) } ctx, cancel := context.WithTimeout(context.Background(), maxRunTime) defer cancel() cmd = exec.CommandContext(ctx, "sel_ldr_x86_64", "-l", "/dev/null", "-S", "-e", exe, testParam) https://github.com/golang/playground/blob/master/sandbox.go#L320-L339
©2018 Wantedly, Inc. cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32", "GOPATH=" + os.Getenv("GOPATH")}
if out, err := cmd.CombinedOutput(); err != nil { if _, ok := err.(*exec.ExitError); ok { // Return compile errors to the user. // Rewrite compiler errors to refer to progName // instead of '/tmp/sandbox1234/main.go'. errs := strings.Replace(string(out), in, progName, -1) // "go build", invoked with a file name, puts this odd // message before any compile errors; strip it. errs = strings.Replace(errs, "# command-line-arguments\n", "", 1) return &response{Errors: errs}, nil } return nil, fmt.Errorf("error building go source: %v", err) } ctx, cancel := context.WithTimeout(context.Background(), maxRunTime) defer cancel() cmd = exec.CommandContext(ctx, "sel_ldr_x86_64", "-l", "/dev/null", "-S", "-e", exe, testParam) https://github.com/golang/playground/blob/master/sandbox.go#L320-L339
©2018 Wantedly, Inc. NaClͱ αϯυϘοΫεΛ࣮ݱ͢ΔͨΊͷͷɹ $ISPNFͷΣϒετΞͰ͞ΕΔ ΞϓϦέʔγϣϯΛ࣮ߦ͢ΔͷʹΘΕΔͷ
/B$M༻ʹϏϧυ͞ΕͨόΠφϦ͕ඞཁ<ཁग़య> https://ja.wikipedia.org/wiki/Google_Native_Client
©2018 Wantedly, Inc. ͳͥ͏·͍ͬͨ͘ͷ͔ /B$M ίʔυͷ࣮ߦͷࡍͷΈ༗ޮͩͬͨ /B$MͰ4BOECPY͕࣮ݱ͞Ε͍ͯͨ
(P͕/B$M༻ͷόΠφϦΛ࡞ΕΔʢ(004OBDMʣɹ
©2018 Wantedly, Inc. ͳͥ͏·͍ͬͨ͘ͷ͔
©2018 Wantedly, Inc. https://play-dot-k8s-test-219404.appspot.com/ ੬ऑੑෆ۩߹ͳͲΛݟ͚ͭͨΒڭ͍͑ͯͩ͘͞