Slide 1

Slide 1 text

Go言語のモジュール管理 完全に理解した 2023/02/23 エンジニア達の「完全に理解した」Talk #38 磯江 宏由紀

Slide 2

Slide 2 text

自己紹介 名前:磯江 宏由紀 所属:虎の穴ラボ株式会社    クリエイター支援プラットフォーム開発 読んでいる書籍:「教養としての決済」 決済周りの開発をしたことがあったので興味を惹かれた 決済にまつわる歴史や雑学的が楽しい

Slide 3

Slide 3 text

サンプルにするプロジェクト エンジニア達の「〇〇完全に理解した」Talk #33で話した GolangでOGP用に画像を作る自作プログラム https://github.com/HiroyukiIsoe/golang-image-util ● 画像の読み込み、保存 ○ 標準モジュール+α ● 画像をぼかす、文字を書き込む ○ 外部モジュール ● 画像をS3に保存する ○ 自作モジュール(外部モジュールのラッパー)

Slide 4

Slide 4 text

Go言語のモジュール管理 ● Go Module ○ Go1.11からサポートされたモジュール管理方法 ○ モジュールの初期化は以下コマンド ■ go mod init “モジュール名” ● GOPATH ○ Go1.10以前利用していたモジュール管理方法 ○ 昔の情報を漁っていることがあるので注意

Slide 5

Slide 5 text

Go言語のモジュールを管理で利用するファイル モジュール管理に利用しているファイルは以下2つ ● go.mod ○ モジュールも依存関係やバージョン情報を記録しているファイル ● go.sum ○ チェックサムを記録しているファイル ライブラリ改ざんなどを検知できるが、個人開発の規模だと気にすることはない

Slide 6

Slide 6 text

go.mod 自分自身のモジュール名→ Go言語のバージョン→ → 依存モジュールのパスと バージョン module image-util go 1.19 require ( github.com/aws/aws-sdk-go-v2 v1.17.3 github.com/aws/aws-sdk-go-v2/config v1.18.10 github.com/aws/aws-sdk-go-v2/service/s3 v1.30.1 github.com/esimov/stackblur-go v1.1.0 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 golang.org/x/image v0.0.0-20220722155232-062f8c9fd539 )

Slide 7

Slide 7 text

モジュールの利用:標準モジュール モジュールを扱うときは「import」を利用し てモジュールを読み込む。 今回は標準モジュール「fmt」をつかって標 準出力に「Hello World」と表示している。 package main import "fmt" func main() { fmt.Println("Hello World") }

Slide 8

Slide 8 text

package s3 import ( =(中略)= "github.com/aws/aws-sdk-go-v2/service/s3" ) var client *s3.Client func init() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { log.Fatal(err) } client = s3.NewFromConfig(cfg) } モジュールの利用:外部モジュール 利用したいモジュールを「go get」コマンド などで取得した後、 標準モジュールの利用と同様に 「import」を利用して読み込む。 サンプルは自作モジュール。 golang-image-util ┗internal  ┗s3   ┗s3.go

Slide 9

Slide 9 text

モジュール利用:自作モジュール package main import ( =(中略)= "image-util/internal/s3" =(中略)= ) =(略)= go.modで定義した自分自身のモジュール 名から始める必要がある以下に依存して いるわけではない ● ディレクトリ名 ● 相対的なパス 自分が「go mod init image-util」としていた ことを忘れていた(1敗)

Slide 10

Slide 10 text

まとめ ● Go言語のパッケージ管理は「GoModule」で行っている ● go.modファイルで依存関係を管理 ● 自作モジュールを読み込むときには、自身のモジュール名を要確認

Slide 11

Slide 11 text

おわり