From Tokyo, Japan. Web-Developer. Write some codes by Go/Scala And thanks everything around my self.

03.外部パッケージを使ってみる(gosenbon-knock)

シリーズGosenbonKnockでは会社でGo入門用に起こしたテキストを適度にコピーして公開していきます

 

便利な外部パッケージの使い方、依存関係の解決などについて学ぶ

Goではfmt, logなどの標準パッケージと、githubなどに公開されているライブラリパッケージ(ここではこれを便宜上「外部パッケージ」と呼びます)があり、外部パッケージを利用して実装した処理またはアプリケーション配布する場合にはこのパッケージへの依存関係を解決する必要があります。

 

外部パッケージを使ってみよう

実務でよく使うであろうロギング用のパッケージを利用する前提で進めていきます。

利用するライブラリはこちらです

https://github.com/rs/zerolog

基本の利用方法

パッケージをimportする時、基本的にgoは${GOPATH}/srcを検索しに行きます。

基本的には、必要なライブラリを自分でgo getして利用していきます

この方法を利用する場合、makeファイルやシェルなどを作成して、その中にgo get するリストを作成しておくと、配布時にも便利です

以下のコマンドを実行し、ライブラリを取得します

go get -u github.com/rs/zerolog

 

すると、${GOPATH}/src/github.com/rs/zerolog というディレクトリが増えていると思います。

取得するライブラリのソースコードを${GOPATH}/src配下に(およびビルドされたバイナリを${GOPATH"/bin配下に)配置するのがgo getの機能です。

依存関係解決ツールを利用したパッケージ利用方法

Go1.5から、依存パッケージが${GOPATH}/srcに存在しない場合に実行パッケージ中のvendorディレクトリ配下に対してパッケージの検索を行えるようになっており、

それを利用して依存関係解決ツールを用いて依存パッケージを管理できるようになりました。

パッケージ管理ツールについてはhttps://github.com/golang/go/wiki/PackageManagementToolsを参考にしてもらえると良いですが、ここでは割りと一般的に利用されている(と私が思っている)Glideを利用したいと思います。

glideを初期化するため、パッケージのディレクトリ内で以下を実行します。色々聞かれますが、Yとかで大丈夫(たぶん)

 

glide init

 

以下のコマンドを実行し、ライブラリを取得します。

 

glide get github.com/rs/zerolog

 

色々聞かれる場合があります。

[INFO] Preparing to install 1 package.

[INFO] Attempting to get package github.com/rs/zerolog

[INFO] --> Gathering release information for github.com/rs/zerolog

[INFO] The package github.com/rs/zerolog appears to have Semantic Version releases (http://semver.org).

[INFO] The latest release is v1.3.0. You are currently not using a release. Would you like

[INFO] to use this release? Yes (Y) or No (N)

セマンティックバージョンに則っている場合に、最新のリリースを見つけてきて、これで良いか聞かれます。他のパッケージでも共通的に使っているものが多いと、そちらの依存関係も確認しないといけませんが、そうでない場合はYで大丈夫なはずです。

[INFO] The package github.com/rs/zerolog appears to use semantic versions (http://semver.org).

[INFO] Would you like to track the latest minor or patch releases (major.minor.patch)?

[INFO] Tracking minor version releases would use '>= 1.3.0, < 2.0.0' ('^1.3.0'). Tracking patch version

[INFO] releases would use '>= 1.3.0, < 1.4.0' ('~1.3.0'). For more information on Glide versions

[INFO] and ranges see https://glide.sh/docs/versions

[INFO] Minor (M), Patch (P), or Skip Ranges (S)?

Glideで管理する上で、最新リリースが更新された場合にインストールするバージョンの範囲を指定します。

基本的にはMinor(M)で問題ないはずですが、こちらも他のパッケージとの依存関係が影響するので、場合によっては動作に影響が及びますが、ひとまずそのときに考えることにしましょう()

インストールできた場合、vendor/github.com/rs/zerologができているはずです。また、glide initによってglide.yamlファイルが作成され、glide getによってglide.yamlへのパッケージの追記,及び glide.lockファイルの作成が行われているはずです。

パッケージの使用方法

前置きは長くなりましたが、インストールできたと思いますので、使ってみましょう。

package main

import (

    "github.com/rs/zerolog/log"

)

func main() {

    log.Info().Msg("hello world")

}

go run で実行してみるとJSONの構造にパースされたログが表示されるかと思います。

 

 

関連する課題

 

 

04.パッケージ構成について(gosenbon-knock)

02.ハローワールドする(gosenbon-knock)