indilog

Ruby/Rails/React/Goなどに関して自分が勉強したことなどを投稿しています

みんなのGo言語 Day3

今日もつらつらと読んだことをメモ的に書いていく📝

Goを始める

学習方法

プロジェクトを始める時に気をつけること

  • リポジトリ名は小文字にする
  • リポジトリディレクトリ構造は $GOPATH/src/{レポジトリのドメイン}/{レポジトリのパス} の形にする
    • 例えば、githubなどにホストする場合は github.com/indigolain/myprojなどにする
    • 配置は $GOPATH/src 以下にする
  • ディレクトリ名はパッケージ名と同一にする
  • testdataやアンダースコアで始まるディレクトリはgoのパッケージとして見なされない
  • サブパッケージはサブディレクトリを切って作る
    • 基本的にはあまりサブパッケージを作ることはない、ロガーのパッケージなどはあり得る
      • 他のプロジェクトから使えるような形を維持できるようにすることを考える
    • コンポーネントはtypeを定義して、typeごとにファイルを分けるのが良い
  • サブパッケージはインポートする際に絶対パスで指定する
    • go getなどで取ってくる時に絶対パスである必要がある

外部パッケージの依存管理について

  • goにはvendoringという依存管理の機能がついている
    • プロジェクト配下に vendor/ 以下にパッケージを配置すれば、GOROOTや$GOPATHよりもそちらを優先して読み込むようになっている
  • これに加えてglideを入れると、bundlerのGemfileやGemfile.lockなどと同じようなglide.ymlとglide.lockというファイルが生成され、これをコミットしておくことによって同じバージョンの外部パッケージが、他の環境でもインストールできるようになる github.com
    • また、テストなどであるパス以下のディレクトリを対象にしている際に ./... などとするが、vendoringを使用している場合、vendor以下のディレクトリに対してもテストが行うことになってしまうが、 go test $(glide novendor) などとすると、それを無視してテストを実行できる

Makefileをタスクランナーとして使う

  • rubyのrakeのように、makeを使うことで、初期のsetupやその他のテストをここに定義しておく
  • 複雑なタスクになってくる場合は、 _tools/ などにシェルスクリプトを配置して、呼び出すようにする