SlideShare a Scribd company logo
Goのパッケージ構成で
試行錯誤してみた話
Go conference 2015 Summer
自己紹介
@fkm / 深見
モケラボ株式会社
代表取締役(最近作った)
Androidアプリを受託で作っ
たり
Goでサーバーサイド書いた
り
Gocon 2015 Spring
でGoにハマる
作ったもの
OpenInvoiceのバックエンド部分
パッケージ
● フォルダ=パッケージ
● フォルダ名がパッケージ名
● import時に別名をつけることができる
○ 名前がぶつかってもあんまり困らない
○ とはいえ面倒
で
なんでパッケージ
分けるんだっけ?
公開ライブラリ
githubなどで公開されているものをそのまま
指定できる
例)
import (
"github.com/gorilla/mux"
)
package private
● 同じパッケージ内のみアクセスできる
● Goでは小文字ではじまる名前がこれ
● 外部には見せたくないけど共通の処理
● 往々にしてこういう関数ほどテストを書き
たくなる
Goで何つくる?
● ライブラリ
● ツール
● Webサーバー
githubで公開するとき
● リポジトリ名がパッケージ名になる
○ "github.com/gorilla/mux"
● ライブラリが複数パッケージで構成される場合
は?
○ なるべく分けずに1つに詰め込む?
○ 依存するパッケージも1つずつリポジトリ作る?
こんな時は
読め!
github.com/gorilla/mux/mux.go
1つずつ
リポジトリ
作るの。。。?
Dockerでは?
docker/api/server/server_linux.go
github.com/docker/
docker/daemon
ライブラリを作る時
複数のパッケージを
1つのリポジトリにいれても
大丈夫
GoでWebサーバー
REST層
Service層
Model層
よく言われること
実装と
インターフェースは
分けよう
こうやってみた
MySQLで動くようにしてよー
SQLiteで動くようにしてよー
どこに追加するんだ。。。?
これはどうだ?
ん?
Javaってこうやってたような?
試行錯誤のまとめ
● ライブラリは、1リポジトリに複数パッケージいれ
ても大丈夫
○ ライブラリ内での参照も可能
● アプリでのパッケージ分けは、他の言語と同
様、基本に忠実に。
もうちょっとだけ
パッケージの話
internal
● Go 1.4で追加
● service/impl/internal
● importできるのはツリー上にいるパッケージの
み
● github上のパッケージでは、使えない。。
パッケージ名判定
http://www.pkgname.com/
● パッケージ名がGoらしいかどうかを判定してく
れるツール
○ go-libのような-をつけるのはダメぽん などを指摘
○ githubで公開する前に確認しよう
な、なくなってる。。。。
パッケージ名判定
かろうじてソースはあった
https://github.com/aybabtme/pkgname
近日中に弊社サイトで動くようにしてみます

More Related Content

What's hot

Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
 
Go入門
Go入門Go入門
Go入門
Takuya Ueda
 
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうGo初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
Takuya Ueda
 
Go modules
Go modulesGo modules
Go modules
YoshitomoYasuno
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
 
Goとテスト
GoとテストGoとテスト
Goとテスト
Takuya Ueda
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発
Hiroshi Kurokawa
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Takuya Ueda
 
Golang入門
Golang入門Golang入門
Golang入門
Yukihiro Kitazawa
 
GAE/Goとsyncパッケージ
GAE/GoとsyncパッケージGAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
Shinya Okano
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
京大 マイコンクラブ
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Takuya Ueda
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
 

What's hot (20)

Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
 
Go入門
Go入門Go入門
Go入門
 
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうGo初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
 
Go modules
Go modulesGo modules
Go modules
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 
Goとテスト
GoとテストGoとテスト
Goとテスト
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
 
Golang入門
Golang入門Golang入門
Golang入門
 
GAE/Goとsyncパッケージ
GAE/GoとsyncパッケージGAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
 

Similar to Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer

Hello GoDoc!
Hello GoDoc!Hello GoDoc!
Hello GoDoc!
laco0416
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?Ryuji Iwata
 
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
Atsushi Yasuda
 
社内勉強会1 go lang
社内勉強会1 go lang 社内勉強会1 go lang
社内勉強会1 go lang
Tsuyoshi Nakamura
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
zaru sakuraba
 
Google Gadgetsを看取る
Google Gadgetsを看取るGoogle Gadgetsを看取る
Google Gadgetsを看取る
Takashi SASAKI
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
Hiroaki Kawai
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れる
Yusuke Wada
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?
Ryuji Iwata
 
Golang handson
Golang handsonGolang handson
Golang handson
Ryuto Yasugi
 
Goはじめました
GoはじめましたGoはじめました
Goはじめました
Masanori Masui
 
Golangによるubicの試作
Golangによるubicの試作Golangによるubicの試作
Golangによるubicの試作
kn1kn1
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
Tatsumi Naganuma
 
Github for windows学内での使い方
Github for windows学内での使い方Github for windows学内での使い方
Github for windows学内での使い方
Imai Kenta
 
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
hogesuzuki
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBasekyon mm
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
Takuya Sato
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
Kazuchika Sekiya
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
 

Similar to Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer (20)

Hello GoDoc!
Hello GoDoc!Hello GoDoc!
Hello GoDoc!
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?
 
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンドGo言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
 
社内勉強会1 go lang
社内勉強会1 go lang 社内勉強会1 go lang
社内勉強会1 go lang
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
Google Gadgetsを看取る
Google Gadgetsを看取るGoogle Gadgetsを看取る
Google Gadgetsを看取る
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れる
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?
 
Golang handson
Golang handsonGolang handson
Golang handson
 
Goはじめました
GoはじめましたGoはじめました
Goはじめました
 
Golangによるubicの試作
Golangによるubicの試作Golangによるubicの試作
Golangによるubicの試作
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
Github for windows学内での使い方
Github for windows学内での使い方Github for windows学内での使い方
Github for windows学内での使い方
 
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 

More from Hirokazu Fukami

Goを知る
Goを知るGoを知る
Goを知る
Hirokazu Fukami
 
Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2
Hirokazu Fukami
 
[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん
Hirokazu Fukami
 
Unity + MBaaS
Unity + MBaaSUnity + MBaaS
Unity + MBaaS
Hirokazu Fukami
 
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
Hirokazu Fukami
 
Kii cloud 勉強会 #2
Kii cloud 勉強会 #2Kii cloud 勉強会 #2
Kii cloud 勉強会 #2
Hirokazu Fukami
 
Git level1
Git level1Git level1
Git level1
Hirokazu Fukami
 
プログラミング勉強会 その0
プログラミング勉強会 その0プログラミング勉強会 その0
プログラミング勉強会 その0Hirokazu Fukami
 

More from Hirokazu Fukami (8)

Goを知る
Goを知るGoを知る
Goを知る
 
Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2Fragmentを使って「アプリ」を作る2
Fragmentを使って「アプリ」を作る2
 
[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん
 
Unity + MBaaS
Unity + MBaaSUnity + MBaaS
Unity + MBaaS
 
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
 
Kii cloud 勉強会 #2
Kii cloud 勉強会 #2Kii cloud 勉強会 #2
Kii cloud 勉強会 #2
 
Git level1
Git level1Git level1
Git level1
 
プログラミング勉強会 その0
プログラミング勉強会 その0プログラミング勉強会 その0
プログラミング勉強会 その0
 

Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer