50
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Go言語】パッケージのimportについて整理した

Posted at

はじめに

こんにちは!2019年8月から株式会社メディアドゥのエンジニアになりました、小川と申します。
配属されて最初、Goのプロジェクトのに参加した時、開発環境の構築でハマったので記事にします。

チーム開発とパッケージ管理

チーム開発においては、チーム内で使用する言語やライブラリを同じ依存関係のバージョンで統一する必要があります。
Goでのパッケージ管理手法はgo1.12から正式にGo Modulesがサポートされており、$GOPATH/srcvendorを使用する必要はなくなりましたが、現場ではgvmdepを使用した開発は結構あります。そこで、改めてパッケージについてまとめました。

Go言語のパッケージimport方法

$GOPATH
  └── src
       └──github.com
            └──hogeProject
                |
                ├── hoge
                |     └──hoge.go
                └── main.go

こんなパッケージ構成になっている時、
Goのパッケージのimportは以下のように行う。

importの例
package main

import (
  // 標準パッケージのimport・・・1
  "fmt"
  
  // プロジェクト内の他パッケージを相対パスでimport・・・2
  "./hoge"
  
  // github上の外部パッケージのimoprt・・・3
  "github.com/fsnotify/fsnotify"
  
  // プロジェクト内の他パッケージを絶対パスでimport・・・4
  "github.com/hogeProject/hoge"

)

func main() {
  
  //処理…
       
}

【1】. 標準パッケージのimport

標準パッケージは、シンプルにパッケージ名を記載することでimportできる。

【2】. プロジェクト内の他パッケージを相対パスでimport

プロジェクト内の自作パッケージは相対パスでimportできるが、go buildでコンパイルを実行するとエラーになる。コードの曖昧さ回避のために公式で推奨されていないようです。

【3】. github上の外部パッケージをimoprt

github上の外部パッケージを使用する場合は、おなじみ、go getコマンドで$GOPATH/bin配下にインストールする。また、参加したプロジェクトがdepを使用している場合はdep ensureコマンドで、使用している外部パッケージをプロジェクトディレクトリ内のvendor配下にインストールされます。

【4】. プログラム内の他パッケージを絶対パスでimport

【2】では相対パスだが、基本的には絶対パスで指定する。個人開発するときには特に問題にならないが、チーム開発などでgit clone ~する場合はcloneする場所を注意しないといけない。Goは$GOPATH/srcより下をパスとして認識するため、ソース内のパッケージのimportパスと同じディレクトリ構成にしないといけない。

今回の例だと、内部パッケージのパスが、github.com/hogeProject/hogeとなっているので、$GOPATH/src/github.com内にhogeProjectをgit cloneする必要がある。

これに気をつけないと、depでパッケージ管理をしてるプロジェクトでは、dep ensureした際に内部パッケージとして認識せず、外部パッケージとしてvendor配下に取り込んで、そっちを参照してしまう。。。

参考にした記事

50
40
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
50
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?