Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The Go Playgoroundで 外部パッケージ使いたい
Search
Hazumi Ichijo
October 19, 2018
Programming
7.1k
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
480
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
1.5k
病院の情報フローを理解して、 予約〜会計の見え方が変わった話
hazumirr
1
2k
Rubyのコード削除したい時 僕がやること
hazumirr
0
300
テーブル駆動テストと状態
hazumirr
5
2.2k
オンラインテストしようと思った その日に開始できる環境を目指して
hazumirr
0
1.1k
推薦によるプロダクト改善とマイクロサービスが噛み合った話
hazumirr
2
4.9k
ChatGPTで僕が知っていることまとめ
hazumirr
3
3.1k
プロダクトチームとどう 協業し分析環境を改善するか
hazumirr
2
1.7k
Other Decks in Programming
See All in Programming
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
450
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
350
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
130
contenteditable と日本語入力に向き合う
colorful12
0
170
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
190
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
380
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
640
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
6
4.7k
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Between Models and Reality
mayunak
4
490
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
350
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
610
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Code Reviewing Like a Champion
maltzj
529
40k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Producing Creativity
orderedlist
PRO
348
41k
Design in an AI World
tapps
1
350
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/ ੬ऑੑෆ۩߹ͳͲΛݟ͚ͭͨΒڭ͍͑ͯͩ͘͞