Submit Search
Upload
Go Friday 傑作選
•
6 likes
•
2,731 views
Takuya Ueda
Follow
golang.tokyo#9のLTで発表した内容です。 https://golangtokyo.connpass.com/event/65921/
Read less
Read more
Technology
Report
Share
Report
Share
1 of 17
Download now
Download to read offline
Recommended
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
Takuya Ueda
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
RDRAモデリングを見てみよう
RDRAモデリングを見てみよう
Zenji Kanzaki
Go入門
Go入門
Takuya Ueda
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ
Kenji Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
Recommended
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
Takuya Ueda
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
RDRAモデリングを見てみよう
RDRAモデリングを見てみよう
Zenji Kanzaki
Go入門
Go入門
Takuya Ueda
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ
Kenji Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
インタフェースの実装パターン
インタフェースの実装パターン
Takuya Ueda
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
Kioto Hirahara
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
どこに何を書くのか?
どこに何を書くのか?
pospome
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
go_router が隠してくれるもの
go_router が隠してくれるもの
cch-robo
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
ReSharperを使ってみた
ReSharperを使ってみた
ytanno
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Takuya Ueda
認証Gwのプロトタイプでgolang使ってみた20171024
認証Gwのプロトタイプでgolang使ってみた20171024
Kohji Osamura
More Related Content
What's hot
インタフェースの実装パターン
インタフェースの実装パターン
Takuya Ueda
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
Kioto Hirahara
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
どこに何を書くのか?
どこに何を書くのか?
pospome
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
go_router が隠してくれるもの
go_router が隠してくれるもの
cch-robo
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
ReSharperを使ってみた
ReSharperを使ってみた
ytanno
What's hot
(20)
インタフェースの実装パターン
インタフェースの実装パターン
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
PHP AST 徹底解説
PHP AST 徹底解説
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
どこに何を書くのか?
どこに何を書くのか?
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
go_router が隠してくれるもの
go_router が隠してくれるもの
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
C#でわかる こわくないMonad
C#でわかる こわくないMonad
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
ReSharperを使ってみた
ReSharperを使ってみた
Viewers also liked
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Takuya Ueda
認証Gwのプロトタイプでgolang使ってみた20171024
認証Gwのプロトタイプでgolang使ってみた20171024
Kohji Osamura
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Takuya Ueda
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
Static Analysis in Go
Static Analysis in Go
Takuya Ueda
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Jxck Jxck
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
Kensaku Komatsu
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Takuya Ueda
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
Viewers also liked
(20)
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
認証Gwのプロトタイプでgolang使ってみた20171024
認証Gwのプロトタイプでgolang使ってみた20171024
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Static Analysis in Go
Static Analysis in Go
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Go静的解析ハンズオン
Go静的解析ハンズオン
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
GoによるiOSアプリの開発
GoによるiOSアプリの開発
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Cloud Functionsの紹介
Cloud Functionsの紹介
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Cloud functionsの紹介
Cloud functionsの紹介
Similar to Go Friday 傑作選
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
Goとテスト
Goとテスト
Takuya Ueda
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
Tetsuya Morimoto
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
Atsushi Tadokoro
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
SwiftのOptionalを理解する
SwiftのOptionalを理解する
幸雄 村上
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
Computational Materials Science Initiative
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
マスター・オブ・reflectパッケージ II
マスター・オブ・reflectパッケージ II
Takuya Ueda
エキスパートGo
エキスパートGo
Takuya Ueda
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
po-1. プログラミング入門
po-1. プログラミング入門
kunihikokaneko1
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
Yohei Sato
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
a know
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
KyutatsuNishiura
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
k4200
ユニットテスト 1日目
ユニットテスト 1日目
Yoshiki Shibukawa
Similar to Go Friday 傑作選
(20)
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Goとテスト
Goとテスト
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
SwiftのOptionalを理解する
SwiftのOptionalを理解する
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
マスター・オブ・reflectパッケージ II
マスター・オブ・reflectパッケージ II
エキスパートGo
エキスパートGo
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
po-1. プログラミング入門
po-1. プログラミング入門
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
ユニットテスト 1日目
ユニットテスト 1日目
More from Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
WebAssembly with Go
WebAssembly with Go
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
Takuya Ueda
そうだ、Goを始めよう
そうだ、Goを始めよう
Takuya Ueda
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
More from Takuya Ueda
(10)
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
WebAssembly with Go
WebAssembly with Go
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
そうだ、Goを始めよう
そうだ、Goを始めよう
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Recently uploaded
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(9)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
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 now