こんにちは。KOUKIです。
とあるWeb系企業で、Go言語エンジニアをしています。
Go言語 V1.18の新機能である「go work」コマンドを使いつつ、新しいGo言語の実装方法を試してみましょう!
Go Version
1 2 |
$ go version go version go1.18.2 darwin/amd64 |
Workspaceの設定
最初にWorkspaceの設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# フォルダ作成 mkdir -p sample_project/toolkit sample_project/app $ cd <meta charset="utf-8">sample_project # go 初期化 $ cd toolkit/ $ go mod init toolkit $ cd ../app/ $ go mod init app # sample_projectに戻る $ cd .. $ tree . ├── app │ └── go.mod └── toolkit └── go.mod |
現在のフォルダ構成は、以下のようになっています。
1 2 |
$ ls app toolkit |
この状態の時、以下のコマンドを実行してください。
1 2 3 4 5 |
$ go work init toolkit app # go.workファイルの作成を確認 $ ls app go.work toolkit |
「go.work」ファイルが生成されましたが、これは一体何なのでしょうか?
ファイルの中身は以下のようになっていました。
1 2 3 4 5 6 7 8 |
# go.worrk go 1.18 use ( ./app ./toolkit ) |
どうやら複数のモジュールを一括管理できる機能のようですね。
どうやって動作するのか、実際にプログラミングしながら探ってみましょう。
モジュールの実装
toolkitには、appで利用する様々な機能をモジュールとして実装したいと思います。
1 |
$ touch toolkit/tools.go |
ここには、簡単に数値の増減を行うメソッドを実装しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// tools.go package toolkit type Tools struct { sum int } func (t *Tools) Increment(n int) int { t.sum += n return t.sum } func (t *Tools) Decrement(n int) int { t.sum -= n return t.sum } |
アプリケーションの実装
続いて、appにアプリケーションを実装していきます。
1 |
$ touch app/main.go |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// app/main.go package main import ( "fmt" "toolkit" ) func main() { var tools toolkit.Tools fmt.Println(tools.Increment(10)) fmt.Println(tools.Decrement(3)) } |
「import “toolkit”」にて、他のモジュールである「Tools」Structを呼び出すことができました。
ちなみに、appフォルダ配下のgo.modにはtoolkitの呼び出し文は記述されません。
1 2 3 4 5 |
# appのgo.mod module app go 1.18 |
なるほど。これは便利そうですね。
コードを実行してみましょう。
1 2 3 |
$ go run app/main.go 10 7 |
問題なさそうです。
GitHubなんかでgit cloneしたGoのモジュールを「go work」で括れば使えるみたいですね。
今までだと、go getコマンドで3rd-partyモジュールをインストールして使っていましたが、その代わりに使えそうですね。
テストコードの実装
テストコードも実装してみましょう。
1 |
touch toolkit/tools_test.go |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package toolkit import "testing" func TestTools_Increment(t *testing.T) { var testTools Tools expected := 20 testTools.Increment(10) result := testTools.Increment(10) if expected != result { t.Error("wrong result: result = ", result) } } func TestTools_Decrement(t *testing.T) { var testTools Tools expected := -20 testTools.Decrement(10) result := testTools.Decrement(10) if expected != result { t.Error("wrong result: result = ", result) } } |
1 2 |
$ go test toolkit/ ok toolkit 0.356s |
簡単なテストコードでしたね。
おわりに
今回は、「go work」コマンドの挙動を簡単に紹介しました。
Goのコードをモジュール化して、至る所で使い回すことが可能になりそうですね。
Goはとても便利なプログラミング言語なので、ぜひぜひ学習してみてください。
それでは、また!
Go言語まとめ

コメントを残す
コメントを投稿するにはログインしてください。