Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takuya Ueda
PDF, PPTX
2,781 views
Go Friday 傑作選
golang.tokyo#9のLTで発表した内容です。 https://golangtokyo.connpass.com/event/65921/
Technology
◦
Read more
6
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 17
2
/ 17
3
/ 17
Most read
4
/ 17
Most read
5
/ 17
6
/ 17
7
/ 17
8
/ 17
9
/ 17
10
/ 17
11
/ 17
12
/ 17
13
/ 17
14
/ 17
15
/ 17
16
/ 17
17
/ 17
More Related Content
PDF
Goにおけるバージョン管理の必要性 − vgoについて −
by
Takuya Ueda
PDF
WebAssembly with Go
by
Takuya Ueda
PDF
Google Assistant関係のセッションまとめ
by
Takuya Ueda
PDF
そうだ、Goを始めよう
by
Takuya Ueda
PDF
GAE/Goとsyncパッケージ
by
Takuya Ueda
PDF
Cloud functionsの紹介
by
Takuya Ueda
PDF
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
PDF
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
by
Takuya Ueda
WebAssembly with Go
by
Takuya Ueda
Google Assistant関係のセッションまとめ
by
Takuya Ueda
そうだ、Goを始めよう
by
Takuya Ueda
GAE/Goとsyncパッケージ
by
Takuya Ueda
Cloud functionsの紹介
by
Takuya Ueda
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
What's hot
PDF
Cloud Functionsの紹介
by
Takuya Ueda
PDF
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
PDF
goパッケージで型情報を用いたソースコード検索を実現する
by
Takuya Ueda
PDF
GoによるiOSアプリの開発
by
Takuya Ueda
PDF
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
PDF
Namespace API を用いたマルチテナント型 Web アプリの実践
by
Takuya Ueda
PDF
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
PDF
エディタの壁を越えるGoの開発ツールの文化と作成法
by
Takuya Ueda
PDF
Go初心者向けハンズオン コマンドラインツールを作ろう
by
Takuya Ueda
PDF
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
PDF
Gopher Fest 2017参加レポート
by
Takuya Ueda
PDF
Goでwebアプリを開発してみよう
by
Takuya Ueda
PDF
Gitはじめの一歩
by
Ayana Yokota
PDF
Go mobileでモバイルアプリを作ろう
by
Takuya Ueda
PDF
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
PDF
Pythonを始めよう
by
shouta yoshikai
PPTX
PyPro2の読みどころ紹介:Python開発の過去と現在
by
Takayuki Shimizukawa
PPTX
私が複数人開発で感じている Git・GitHubのうまみ
by
Shihomi Katayama
PDF
2ヶ月前にgitを始めた私からこれから始める皆さんへ
by
Ayana Yokota
PDF
kintonedevcamp2016s-demo
by
kintone papers
Cloud Functionsの紹介
by
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
by
Takuya Ueda
GoによるiOSアプリの開発
by
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
by
Takuya Ueda
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
エディタの壁を越えるGoの開発ツールの文化と作成法
by
Takuya Ueda
Go初心者向けハンズオン コマンドラインツールを作ろう
by
Takuya Ueda
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
Gopher Fest 2017参加レポート
by
Takuya Ueda
Goでwebアプリを開発してみよう
by
Takuya Ueda
Gitはじめの一歩
by
Ayana Yokota
Go mobileでモバイルアプリを作ろう
by
Takuya Ueda
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
Pythonを始めよう
by
shouta yoshikai
PyPro2の読みどころ紹介:Python開発の過去と現在
by
Takayuki Shimizukawa
私が複数人開発で感じている Git・GitHubのうまみ
by
Shihomi Katayama
2ヶ月前にgitを始めた私からこれから始める皆さんへ
by
Ayana Yokota
kintonedevcamp2016s-demo
by
kintone papers
Viewers also liked
PDF
認証Gwのプロトタイプでgolang使ってみた20171024
by
Kohji Osamura
PDF
Static Analysis in Go
by
Takuya Ueda
PDF
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
PDF
Go静的解析ハンズオン
by
Takuya Ueda
PDF
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PDF
Go1.8 for Google App Engine
by
Takuya Ueda
PDF
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
PPTX
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
PDF
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
PDF
HTTP2 時代の Web - web over http2
by
Jxck Jxck
PPTX
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
PDF
Go入門
by
Takuya Ueda
PDF
エキスパートGo
by
Takuya Ueda
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
by
Ryosuke Okuta
PDF
機械学習概論 講義テキスト
by
Etsuji Nakai
認証Gwのプロトタイプでgolang使ってみた20171024
by
Kohji Osamura
Static Analysis in Go
by
Takuya Ueda
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
Go静的解析ハンズオン
by
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
Go1.8 for Google App Engine
by
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
HTTP2 時代の Web - web over http2
by
Jxck Jxck
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
Go入門
by
Takuya Ueda
エキスパートGo
by
Takuya Ueda
Chainerチュートリアル -v1.5向け- ViEW2015
by
Ryosuke Okuta
機械学習概論 講義テキスト
by
Etsuji Nakai
Similar to Go Friday 傑作選
PDF
マスター・オブ・goパッケージ
by
Takuya Ueda
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
by
Takuya Ueda
PDF
Goとテスト
by
Takuya Ueda
PDF
マスターオブゴールーチンアンドチャネル スタートGo #1
by
Takuya Ueda
PDF
Goでかんたんソースコードの静的解析
by
Takuya Ueda
PDF
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
by
lestrrat
PDF
静的解析を使った開発ツールの開発
by
Takuya Ueda
PPTX
Go guide for Java programmer
by
Masaaki Yonebayashi
PDF
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
PDF
今日から始める Go言語 と appengine
by
a know
PPTX
ヤフーにおけるGoの一例紹介
by
ichirokato5
PDF
20130824 Lightweight Language "Go" @LL matsuri
by
Yoshifumi Yamaguchi
PDF
JavaScript経験者のためのGo言語入門
by
Shohei Arai
PPTX
EchoyaGinhanazeSu_inoka.pptx
by
keink
PDF
Go言語によるwebアプリの作り方
by
Yasutaka Kawamoto
PDF
TechDo Goハンズオン#3
by
privatemy
PDF
Introduction to Spock
by
Takahiro Sugiura
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
by
Masahiro Wakame
PDF
明日から使える気になるGo言語による並行処理
by
Yuto Matsukubo
PDF
Goコンパイラのきもち
by
mjhd-devlion
マスター・オブ・goパッケージ
by
Takuya Ueda
今日から始めるGopher - スタートGo #0 @GDG名古屋
by
Takuya Ueda
Goとテスト
by
Takuya Ueda
マスターオブゴールーチンアンドチャネル スタートGo #1
by
Takuya Ueda
Goでかんたんソースコードの静的解析
by
Takuya Ueda
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
by
lestrrat
静的解析を使った開発ツールの開発
by
Takuya Ueda
Go guide for Java programmer
by
Masaaki Yonebayashi
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
今日から始める Go言語 と appengine
by
a know
ヤフーにおけるGoの一例紹介
by
ichirokato5
20130824 Lightweight Language "Go" @LL matsuri
by
Yoshifumi Yamaguchi
JavaScript経験者のためのGo言語入門
by
Shohei Arai
EchoyaGinhanazeSu_inoka.pptx
by
keink
Go言語によるwebアプリの作り方
by
Yasutaka Kawamoto
TechDo Goハンズオン#3
by
privatemy
Introduction to Spock
by
Takahiro Sugiura
GoCon2016 spring 自作Webフレームワーク uconを作った話
by
Masahiro Wakame
明日から使える気になるGo言語による並行処理
by
Yuto Matsukubo
Goコンパイラのきもち
by
mjhd-devlion
Go Friday 傑作選
1.
The Go gopher
was designed by Renée French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license. Go Friday傑作選 @golang.tokyo #9 2017/09/29
2.
自己紹介 上田拓也 @tenntenn 2 所属 コミュニティ活動 & Go ビギナー Go Conference
3.
Go Friday ■ GoやGCPに関するソウゾウの社内勉強会 ●
社外で得た知見の共有 ○ 海外カンファレンスについての共有 ○ コミュニティで得た知識の共有 ● 社内の各プロダクト開発で得た知見の共有 ○ 設計の方針や実装方法の共有 ○ 共通ライブラリの共有 ● 社外へのアウトプットの練習 ○ 発表練習 ○ イベント登壇のネタ出し ○ 社内ライブラリのOSS化の相談 参考:https://codeiq.jp/magazine/2017/04/50250/
4.
switchを使おう const ( StatusA =
0 StatusB = 1 StatusC = 0 // miss ) switch s { case StatusA: fmt.Println("A") case StatusB: fmt.Println("B") case StatusC: // error fmt.Println("C") }
5.
ついにIsTemporaryを実装したぞう ■ 用途 ● 一時的なエラーを表現する ●
タスクキューのエラーでリトライすればそのうち直るもの ● エラーログとして書き出されるとslackに通知されて困るもの type temporary interface { Temporary() bool } func IsTemporary(err error) bool { te, ok := err.(temporary) return ok && te.Temporary() } 参考:http://deeeet.com/writing/2016/04/25/go-pkg-errors/
6.
@mitchellh のテストの話よい ■ Advanced
Testing with Go ● https://speakerdeck.com/mitchellh/advanced-testing-with-go ● テーブルドリブンテスト ● サブテスト ● ヘルパー関数
7.
テーブル駆動テスト ■ テスト対象のデータを羅列してテストする var flagtests
= []struct { in string out string }{ {"%a", "[%a]"}, {"%-a", "[%-a]"}, {"%+a", "[%+a]"}, {"%#a", "[%#a]"}, {"% a", "[% a]"}, } func TestFlagParser(t *testing.T) { var flagprinter flagPrinter for _, tt := range flagtests { s := Sprintf(tt.in, &flagprinter) if s != tt.out { t.Errorf("Sprintf(%q, &flagprinter) => %q, want %q", tt.in, s, tt.out) } } }
8.
サブテスト ■ 子テストを実行するしくみ ● Go1.7から導入された func
TestAB(t *testing.T) { t.Run("A", func(t *testing.T) { t.Error("error") }) t.Run("B", func(t *testing.T) { t.Error("error") }) } go test -v sample -run TestAB/A === RUN TestAB === RUN TestAB/A --- FAIL: TestAB (0.00s) --- FAIL: TestAB/A (0.00s) sample_test.go:10: error FAIL exit status 1 FAIL sample 0.007s サブテストを指定して実行
9.
サブテストとテーブル駆動テスト func TestIsOdd(t *testing.T)
{ cases := []*struct {name string; input int; expected bool}{ {name: "+odd", input: 5, expected: true}, {name: "+even", input: 6, expected: false}, {name: "-odd", input: -5, expected: true}, {name: "-even", input: -6, expected: false}, {name: "zero", input: 0, expected: false}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { if actual := IsOdd(c.input); c.expected != actual { t.Errorf( "want IsOdd(%d) = %v, got %v", c.input, c.expected, actual)}}) } }
10.
テストヘルパー ■ テスト用のヘルパー関数 ● ヘルパー関数はエラーを返さない ●
*testing.Tを受け取ってテストを落とす ● Go 1.9からはT.Helperを使って情報を補足する ○ https://tip.golang.org/pkg/testing/#T.Helper func testTempFile(t *testing.T) string { t.Helper() tf := ioutil.TempFile("", "test") if err != nil { t.Fatal("err %s", err) } tf.Close() return tf.Name() }
11.
APIクライアントを作る時のテストどうしよう ■ ハンドラのテストはnet/http/httptestを使う ● ハンドラのテストのための機能など提供 ●
ResponseRecorder ○ ResponseWriterを実装している ● NewRequestメソッド(1.7以上) ○ 簡単にテスト用のリクエストが作れる
12.
ハンドラのテストの例 func handler(w http.ResponseWriter,
r *http.Request) { fmt.Fprint(w, "Hello, net/http!") } func TestSample(t *testing.T) { w := httptest.NewRecorder() r := httptest.NewRequest("GET", "/", nil) handler(w, r) rw := w.Result() defer rw.Body.Close() if rw.StatusCode != http.StatusOK { t.Fatal("unexpected status code") } b, err := ioutil.ReadAll(rw.Body) if err != nil { t.Fatal("unexpected error") } const expected = "Hello, net/http!" if s := string(b); s != expected { t.Fatalf("unexpected response: %s", s) } } テスト対象 テストコード
13.
HTTPハンドラのモック ■ net/http/httptest.Serverを使う ● https://play.golang.org/p/KADrbDUEBp ts
:= httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, r.RequestURI) })) defer ts.Close() tsURL, err := url.Parse(ts.URL) if err != nil { log.Fatal(err) } client := ts.Client() client.Transport = &http.Transport{ Proxy: http.ProxyURL(tsURL) } res, err := client.Get("http://example.com") if err != nil { log.Fatal(err) }
14.
HTTPSだと動かない!
15.
HTTPSの場合 ■ RoundTriper を実装し、URLを書き換える ●
https://play.golang.org/p/WSSal0bVMs type RewriteTransport struct { Transport http.RoundTripper URL *url.URL } func (t RewriteTransport) RoundTrip(req *http.Request) (*http.Response, error) { req.URL.Scheme = t.URL.Scheme req.URL.Host = t.URL.Host req.URL.Path = path.Join(t.URL.Path, req.URL.Path) rt := t.Transport if rt == nil { rt = http.DefaultTransport } return rt.RoundTrip(req) } リクエストを書き換えるのはあまりよくないが ...
16.
HTTPSの場合 ■ RoundTriper を実装し、URLを書き換える ●
https://play.golang.org/p/WSSal0bVMs s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello %sn", path.Base(r.URL.Path)) })) u, err := url.Parse(s.URL) if err != nil { log.Fatalln("Error:", err) } cli := s.Client() cli.Transport = RewriteTransport{URL: u, Transport: cli.Transport} resp, err := cli.Get("https://example.com") if err != nil { log.Fatalln("Error:", err) } io.Copy(os.Stdout, resp.Body) resp.Body.Close()
17.
Thank you! twitter: @tenntenn Qiita:
tenntenn connpass: tenntenn 17
Download