LoginSignup
1
1

More than 5 years have passed since last update.

dep を使って自作のライブラリを利用してみる #golang

Posted at

今回は golang で自分で作成したライブラリ(git 上に公開)を dep を使って利用するサンプルを作成します。
結果から言うと思ったより簡単でした。

dep について

dep は golang の依存関係管理ツールで glide の後継にあたります。
記事にはしていないですが、会社のツールを作成するときに glide を使ったりしてました。

dep インストール

$ go get -u github.com/golang/dep/cmd/dep

利用されるサンプルライブラリ

パッケージ内の構成

ライブラリなので、subpackage ごとに機能を分割するイメージの構成にしています。

$ tree
├── README.md
├── main.go
├── subpackage_A
│   └── sub_A.go
└── subpackage_B
    └── sub_B.go

ソースコード

サンプルプログラム

ソースコードを作成

単純に 「subpackage_A」「subpackage_B」内の構造体を利用しているだけです。

main.go
package main

import (
    "github.com/ynozue/lib_sample/subpackage_A"
    "github.com/ynozue/lib_sample/subpackage_B"
)

func main() {
    a := subpackage_A.SubA{Name: "hoge"}
    a.PrintA()
    b := subpackage_B.SubB{Name: "hoge"}
    b.PrintA()
}

dep を使って依存関係を解決

初期の構造

$ tree
├── README.md
└── main.go

依存関係を解決

$ dep init
  Using ^1.0.0 as constraint for direct dep github.com/ynozue/lib_sample
  Locking in v1.0.0 (3061ef6) for direct dep github.com/ynozue/lib_sample

依存解決後の構造

「Gopkg.lock」と「Gopkg.toml」が追加され、「vendor」フォルダ内に参照ライブラリのパッケージが追加されていることが確認できます。

$ tree
├── Gopkg.lock
├── Gopkg.toml
├── README.md
├── main.go
└── vendor
    └── github.com
        └── ynozue
            └── lib_sample
                ├── subpackage_A
                │   └── sub_A.go
                └── subpackage_B
                    └── sub_B.go

解決したライブラリのバージョンを確認

$ dep status
PROJECT                       CONSTRAINT  VERSION  REVISION  LATEST  PKGS USED
github.com/ynozue/lib_sample  ^1.0.0      v1.0.0   3061ef6   v1.0.0  2

作成されたファイルの内訳

Gopkg.toml

マニフェストファイルと呼ばれ、このファイルに記載されている内容をもとにして依存関係を解決します。
$ dep init 実行時には

Gopkg.toml
[[constraint]]
  name = "github.com/ynozue/lib_sample"
  version = "1.0.0"

[prune]
  go-tests = true
  unused-packages = true

Gopkg.lock

マニフェストファイルから生成され、実際に利用しているライブラリの revision や version の管理します。

Gopkg.lock
[[projects]]
  name = "github.com/ynozue/lib_sample"
  packages = [
    "subpackage_A",
    "subpackage_B"
  ]
  revision = "3061ef68e52b5cefa7c721b46196b8c1656cbef8"
  version = "v1.0.0"

[solve-meta]
  analyzer-name = "dep"
  analyzer-version = 1
  inputs-digest = "affabfdf90d498aef3be35364024b8ed9e8a0a454dfd1ce90cd6373ac73204c4"
  solver-name = "gps-cdcl"
  solver-version = 1

実行

$ go run main.go
subpackage A [hoge]
subpackage B [hoge]

まとめ

簡単にまとめましたが、dep を利用すれば簡単にプロジェクトごとに依存関係を管理したりすることができるようになるので便利です。また、自作のライブラリについても他の誰かが公開しているライブラリと同じように利用することができるので自分用であったり会社内用に作っても便利ですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1