Submit Search
Upload
20161004 DMM/エウレカ/インテリジェンス合同勉強会
•
7 likes
•
2,533 views
Yusuke Komatsu
Follow
Go言語あるあるの解決方法や便利ツール・パッケージの紹介
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
MonotaRO LT - ESLintの仕組み
MonotaRO LT - ESLintの仕組み
株式会社MonotaRO Tech Team
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
Javascript勉強会資料1
Javascript勉強会資料1
Kenji Kaneko
どう見る?Class Reference
どう見る?Class Reference
Tadahisa Motooka
Doma2 with Kotlin
Doma2 with Kotlin
yy yank
Use Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra package
Tsuda University Institute for Mathematics and Computer Science
Python
Python
miwa207
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Recommended
MonotaRO LT - ESLintの仕組み
MonotaRO LT - ESLintの仕組み
株式会社MonotaRO Tech Team
Kotlinについて学んだコト
Kotlinについて学んだコト
iPride Co., Ltd.
Javascript勉強会資料1
Javascript勉強会資料1
Kenji Kaneko
どう見る?Class Reference
どう見る?Class Reference
Tadahisa Motooka
Doma2 with Kotlin
Doma2 with Kotlin
yy yank
Use Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra package
Tsuda University Institute for Mathematics and Computer Science
Python
Python
miwa207
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
[Golang] Go言語でサービス作ってる話
[Golang] Go言語でサービス作ってる話
株式会社YEBIS.XYZ
「技術のインテリジェンスを創る」をどうやって実現するか
「技術のインテリジェンスを創る」をどうやって実現するか
Yuji Otani
TalknoteとGolang
TalknoteとGolang
leverages_event
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
Yasutaka Kawamoto
Go入門
Go入門
Takuya Ueda
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Yuji Otani
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Couchbase server入門
Couchbase server入門
Yusuke Komatsu
Monitoring of SmartNews
Monitoring of SmartNews
Nobutoshi Ogata
Embulk makes Japan visible
Embulk makes Japan visible
Kai Sasaki
Go x Slack API
Go x Slack API
weddingpark
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
Takaaki Kasai
Grafana datasource plugin
Grafana datasource plugin
Mitsuhiro Tanda
言語の検証と導入
言語の検証と導入
weddingpark
Dockerの基本的な話
Dockerの基本的な話
gree_tech
[GREE Tech Talk#10] ネットワークの可視化
[GREE Tech Talk#10] ネットワークの可視化
gree_tech
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
HighBatch
HighBatch
Nobuhito Sato
alphawing meets heroku
alphawing meets heroku
Kyosuke Kameda
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Mikiya Okuno
Effective JavaScript Ch.1
Effective JavaScript Ch.1
Teppei Sato
More Related Content
Viewers also liked
[Golang] Go言語でサービス作ってる話
[Golang] Go言語でサービス作ってる話
株式会社YEBIS.XYZ
「技術のインテリジェンスを創る」をどうやって実現するか
「技術のインテリジェンスを創る」をどうやって実現するか
Yuji Otani
TalknoteとGolang
TalknoteとGolang
leverages_event
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
Yasutaka Kawamoto
Go入門
Go入門
Takuya Ueda
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Yuji Otani
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Couchbase server入門
Couchbase server入門
Yusuke Komatsu
Monitoring of SmartNews
Monitoring of SmartNews
Nobutoshi Ogata
Embulk makes Japan visible
Embulk makes Japan visible
Kai Sasaki
Go x Slack API
Go x Slack API
weddingpark
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
Takaaki Kasai
Grafana datasource plugin
Grafana datasource plugin
Mitsuhiro Tanda
言語の検証と導入
言語の検証と導入
weddingpark
Dockerの基本的な話
Dockerの基本的な話
gree_tech
[GREE Tech Talk#10] ネットワークの可視化
[GREE Tech Talk#10] ネットワークの可視化
gree_tech
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
HighBatch
HighBatch
Nobuhito Sato
alphawing meets heroku
alphawing meets heroku
Kyosuke Kameda
Viewers also liked
(20)
[Golang] Go言語でサービス作ってる話
[Golang] Go言語でサービス作ってる話
「技術のインテリジェンスを創る」をどうやって実現するか
「技術のインテリジェンスを創る」をどうやって実現するか
TalknoteとGolang
TalknoteとGolang
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
Go入門
Go入門
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Couchbase server入門
Couchbase server入門
Monitoring of SmartNews
Monitoring of SmartNews
Embulk makes Japan visible
Embulk makes Japan visible
Go x Slack API
Go x Slack API
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
Grafana datasource plugin
Grafana datasource plugin
言語の検証と導入
言語の検証と導入
Dockerの基本的な話
Dockerの基本的な話
[GREE Tech Talk#10] ネットワークの可視化
[GREE Tech Talk#10] ネットワークの可視化
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
HighBatch
HighBatch
alphawing meets heroku
alphawing meets heroku
Similar to 20161004 DMM/エウレカ/インテリジェンス合同勉強会
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Mikiya Okuno
Effective JavaScript Ch.1
Effective JavaScript Ch.1
Teppei Sato
Tokyo.R #22 LT
Tokyo.R #22 LT
Masayuki Isobe
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
snicker_jp
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
Goichi Hirakawa
こわくないScala
こわくないScala
Kota Mizushima
Scala is-unscared
Scala is-unscared
Kota Mizushima
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
Similar to 20161004 DMM/エウレカ/インテリジェンス合同勉強会
(9)
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Effective JavaScript Ch.1
Effective JavaScript Ch.1
Tokyo.R #22 LT
Tokyo.R #22 LT
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Kotlinアンチパターン
Kotlinアンチパターン
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
こわくないScala
こわくないScala
Scala is-unscared
Scala is-unscared
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Recently uploaded
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Recently uploaded
(7)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
20161004 DMM/エウレカ/インテリジェンス合同勉強会
1.
Golang こんな時どうする? Yusuke Komatsu 2016-10-04. DMM.comラボ
& eureka & インテリジェンス合同 Go言語勉強会
2.
NULLを許容するDBやJSONって どうしよう? • ポインタを使う • sqlパッケージの型を使う(sql.NullString
とか) • NULLなにそれ?おいしいの?
3.
sql.Null** を使った場合 • sqlパッケージの中で実装されている •
Nil判定もできるし、実態となる型はそのまま (Int64ならInt64で値が格納されている) • Scanを通せばある程度ゆるく解釈してくれる • 1変数内(構造体)に2つのパラメータが格納されてい て、両方見ないと値を取得できない 利点 欠点
4.
ポインタを使った場合 • 数値や文字列などと一緒にNilを使える • Nilを区別しないで使うことができる •
通常の型として扱うには元に戻す必要がある • JsonなどをDecodeする時にゆるい解釈ができない (IntをStringとして解釈するなど) 利点 欠点
5.
NULLを許容問題はRDBだけじゃない • 他のデータベースやキャッシュする際も考慮が必要 • jsonやXMLなどでも使う(特にAPI) •
他言語のプログラムと通信する場合も考える必要があ る
6.
便利な独自型つくりました
7.
JSONのEncode/Decodeが直感的
8.
同じ値でもsetする型によって柔軟に解釈
9.
実は某社のAPIのレスポンスで事故ったので作った • 複数のサービスのデータを取りまとめられていて、サービスごとに型が バラバラ • int型のパラメータにstring型が混ざっていたりする •
APIもPHPで、型やハッシュor配列判定を勝手に吸収して出力されている • 静的言語にとっては死亡フラグ こんな感じだったので またこんなことが起きても対処できるように作りました
10.
genericはいろんな方のいいとこ取り • Scanが定義されているのでsqlパッケージでも意識せず使える • MarshalJSON
/ UnmarshalJSONを定義してるのでEncode/Decode時のNULL は自動的に考慮される • Set関数をつかえば、Nilを考えずに変数に値をセットできる • Value関数を使えば、1つだけ値が返ってくる(Nilの場合はNilが返ってくる) • 型判定の柔軟さはPHP並 • reflectはエラー時のみしか使ってない • sql.Null**型でやっているようなNULL判定も可能
11.
実はGo 2系でGenericsが実装されるかも
12.
http.Response.Body 消失問題しってますか? • http.Response.Bodyを使いまわそうとしても1度 使うと空のio.ReadCloserになってしまう • 変数に入れ直しても変数も消える
13.
こんなことはできません
14.
こうしたら解決できる
15.
みなさんテストってどうしてます? • とりあえずgo test?カバレッジとってる? •
ソースの品質管理(担保)ってどうしてます? • そもそもテストしてますか?
16.
リポジトリ内の全パッケージをテストしたい • リポジトリのルートディレクトリから再帰的にテスト • vendorディレクトリ配下はテストしたくない(glide
nv) • 品質管理のためにカバレッジも取りたい(coverprofile) go test $(glide nv) -coverprofile=coverage.out ERROR: cannot use test profile flag with multiple packages
17.
リポジトリ内の全パッケージをテストしたい ROOT_PATH="$GOPATH/src/seeds.rickcloud.jp/bitbucket/scm/hm/wage" COV_PARTIAL_FILE=profile.cov.out COV_FILE=profile-all.cov.out COV_MODE=count HEADER="mode: $COV_MODE" cd $ROOT_PATH;
# テスト用DBのマイグレーション goose -env testing up; echo "mode: count" > $COV_FILE # ひつようのないディレクトリを除いたディレクトリを再帰的にチェック for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -not -path './cmd' -not -path './release*' -not -path './vendor*' -type d) do if ls $dir/*.go &> /dev/null; then # 個々にテストをして一時保存用プロフィールに保存 go test -v -covermode=count -coverprofile=$dir/$COV_PARTIAL_FILE $dir if [ -f $dir/$COV_PARTIAL_FILE ]; then # 一時保存されたものを出力用プロファイルに転記 cat $dir/$COV_PARTIAL_FILE | tail -n +2 >> $COV_FILE rm $dir/$COV_PARTIAL_FILE fi fi done # テスト用DBのロールバック goose -env testing down;
18.
ソースコードの品質管理 • gofmt (インストール不要) ソースコードを整形する •
go_vet (インストール不要) コンパイルエラーにならないヒューリスティックな問題を検出する • gocyclo (https://github.com/fzipp/gocyclo) 循環的複雑度(コードの複雑性)の検証をする • glint (https://github.com/golang/lint) Golangのlinter • ineffassign (https://github.com/gordonklaus/ineffassign) 無駄な割当を検出する • misspell (https://github.com/client9/misspell) スペルミスを検出する
19.
ソースコードの品質管理
20.
ソースコードの品質管理
21.
THANK YOU!! [generics] • usk81/generic https://github.com/usk81/generic •
proposal: generic programming facilities https://github.com/golang/go/issues/15292 [test] • Go Report Card https://goreportcard.com
Download now