0
0

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初学者が学んだことまとめ〜その4〜(コマンド、パッケージ)

Last updated at Posted at 2018-10-04

#はじめに
こちらの続きです。
Go初学者が学んだことまとめ〜その1〜(構成と実行、構文)
Go初学者が学んだことまとめ〜その2〜(参照型)
Go初学者が学んだことまとめ〜その3〜(構造体、インターフェース)

今回は、Goのコマンド、パッケージなどです。
特徴的なものをピックアップしてまとめています。

#goコマンド
##go fmt
標準フォーマットに整形するコマンド。
下記は再帰的に実行。

$ go fmt ./...

IDEなどではファイル保存時にgo fmtを実行するように設定しておけば、常にフォーマット通りのコードができる。
このコマンドが存在することで、コーディングルールにおける宗教論争を回避している。

##go doc
パッケージのドキュメントを参照するためのコマンド。

$ go doc math/rand
package rand // import "math/rand"

Package rand implements pseudo-random number generators.

Random numbers are generated by a Source. Top-level functions, such as
Float64 and Int, use a default shared Source that produces a deterministic
〜

パッケージ名の後ろをピリオドで区切って定数や関数のドキュメントも参照できる。

$ go doc math/rand.Seed
func Seed(seed int64)
    Seed uses the provided seed value to initialize the default Source to a
    deterministic state. If Seed is not called, the generator behaves as if
    seeded by Seed(1). Seed values that have the same remainder when divided by
    2^31-1 generate the same pseudo-random sequence. Seed, unlike the Rand.Seed
    method, is safe for concurrent use.

###ドキュメント作成
独自に作成したパッケージをgo docに対応させることができる。
ソースコード内に記述したコメントがそのままドキュメントとして利用されるため、非常に簡単。

$GOPATH/src/bar/bar.go
// barパッケージの説明
package bar

// TBar型の構造体
type TBar struct {
	Id int
}

// TBar型に定義されたメソッド
func (t * TBar) Method1() {
}

//コンストラクタ
func NewTBar() *TBar {
	return &TBar{}
}
$ go doc bar
package bar // import "bar"

barパッケージの説明

type TBar struct{ ... }
    func NewTBar() *TBar
$ go doc bar.TBar
type TBar struct {
        Id int
}
    TBar型の構造体


func NewTBar() *TBar
func (t *TBar) Method1()
$ go doc bar.TBar.Method1
func (t *TBar) Method1()
    TBar型に定義されたメソッド

##go get
外部パッケージのダウンロードとインストールをまとめて行うコマンド。
依存関係を抽出して、必要なパッケージのダウンロード、インストールを行ってくれる。

$ go get golang.org/x/net/http2

$GOPATH配下にインストールされる。
ちなみにuninstallコマンドは無いので、削除したい場合は手動で消すしかない。

##dep
Goのオフィシャルチームが開発した依存関係管理ツール。
JavaScriptのnpmやrubyのbundlerのようなもの。

go getは$GOPATH配下にインストールされるが、1つの開発環境で複数のプロジェクトを開発する場合は、同一のパッケージで複数のバージョンを持つことができないという問題が発生する。
そこで、プロジェクトごとにインストールするパッケージを管理するツールがこのdep。
また、どの環境でも同じバージョンのパッケージをインストールすることができる。複数人の開発の際に同一のバージョンで実行されることが保証されるため便利。

他の方が使い方をまとめているので、そちらを参考にしていただければ。
依存関係管理ツールdep(golang)

##その他

コマンド 説明
go version バージョン情報
go env 環境変数を確認
go build ビルド
go install ビルドしてGOPATH内にインストール
go test テストの実行

#パッケージ

公式ドキュメントはこちら

主要なパッケージの簡単な概要と、特徴的なところだけまとめてみた。

パッケージ 概要
os OS依存の機能をラップしたもの。プロセス管理、コマンドライン引数、ファイル操作など。
time 日付、時間関連。スリープ機能(Sleep)、指定時間間隔ごとにチャネル受信(Tick)、指定時間後に一度だけチャネル受信(After)という機能もある。
math 数学関連
math/rand 乱数生成
flag コマンドラインオプション
fmt フォーマット処理を含めた入出力処理。出力先は、標準出力、文字列、io.Writer型。
log ログ出力機能。かなりシンプル。ログレベルやローテート機能などがない。外部パッケージにもデフェクトスンタンダードとなるものがなさそう。
strconv 基本的なデータ型とstring型の相互変換
unicode Unicodeコードポイント処理のユーティリティ
strings 文字列操作
io 入出力のための型とインターフェースがまとめられたもの
bufio 入出力処理にバッファ処理を付加した機能
io/ioutil 入出力処理サポート機能。簡易的なファイルの読み書き、tmpファイル作成など。
regexp 正規表現
json JSONのエンコーダー、デコーダー機能
net/url URLのパースや生成
net/http HTTPクライアント、サーバ機能
sync 非同期処理で使用する排他制御、同期処理
crypto/* MD5,SHA-1等のハッシュ値生成など

#まとめ
Goにはgo fmtやgo docなど素敵なコマンドがあります。また、標準のパッケージが充実しています。
その一方で、パッケージの依存関係管理ツールが弱い、logのローテート機能がないなど、RubyやJavaScriptを使っている人間からすると、なんでその機能がないのと思ってしまうところもありました。何か理由があるのでしょうか?

Go初学者が学んだことまとめは以上になります。
スクリプト言語のような手軽さと、コンパイル言語の高速性を併せ持つこの言語を使いこなせれば、エンジニアとして大きな武器になるはず。これからも学び続けていき、実践で使っていきたいと思います。

#参考
スターティングGo言語

#関連
Go初学者が学んだことまとめ〜その1〜(構成と実行、構文)
Go初学者が学んだことまとめ〜その2〜(参照型)
Go初学者が学んだことまとめ〜その3〜(構造体、インターフェース)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?