Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語のモジュール管理_完全に理解した
Search
h.isoe
February 26, 2023
Programming
0
210
Go言語のモジュール管理_完全に理解した
エンジニア達の「完全に理解した」Talk #38
https://easy2.connpass.com/event/273874/
h.isoe
February 26, 2023
Tweet
Share
More Decks by h.isoe
See All by h.isoe
2022_07_14_おすすめの技術書 LT会 - vol.4_ 問題解決を仕事にする 全ての人へ
ih6109
0
100
Kotlinでサーバーレス! 「Kotless」の紹介
ih6109
1
520
2021_08_19 おすすめの技術書 LT会 - vol.2 Vue.js3超入門がとにかくやさしい
ih6109
0
21k
Other Decks in Programming
See All in Programming
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.9k
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
270
Jakarta EE meets AI
ivargrimstad
0
660
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.6k
CloudNativePGを布教したい
nnaka2992
0
120
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
750
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
220
読まないコードリーディング術
hisaju
0
120
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
410
楽しく向き合う例外対応
okutsu
0
730
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
230
ML.NETで始める機械学習
ymd65536
0
240
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Being A Developer After 40
akosma
89
590k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Automating Front-end Workflow
addyosmani
1369
200k
GraphQLの誤解/rethinking-graphql
sonatard
69
10k
The Invisible Side of Design
smashingmag
299
50k
The World Runs on Bad Software
bkeepers
PRO
67
11k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Designing Experiences People Love
moore
140
23k
Transcript
Go言語のモジュール管理 完全に理解した 2023/02/23 エンジニア達の「完全に理解した」Talk #38 磯江 宏由紀
自己紹介 名前:磯江 宏由紀 所属:虎の穴ラボ株式会社 クリエイター支援プラットフォーム開発 読んでいる書籍:「教養としての決済」 決済周りの開発をしたことがあったので興味を惹かれた 決済にまつわる歴史や雑学的が楽しい
サンプルにするプロジェクト エンジニア達の「〇〇完全に理解した」Talk #33で話した GolangでOGP用に画像を作る自作プログラム https://github.com/HiroyukiIsoe/golang-image-util • 画像の読み込み、保存 ◦ 標準モジュール+α •
画像をぼかす、文字を書き込む ◦ 外部モジュール • 画像をS3に保存する ◦ 自作モジュール(外部モジュールのラッパー)
Go言語のモジュール管理 • Go Module ◦ Go1.11からサポートされたモジュール管理方法 ◦ モジュールの初期化は以下コマンド ▪ go
mod init “モジュール名” • GOPATH ◦ Go1.10以前利用していたモジュール管理方法 ◦ 昔の情報を漁っていることがあるので注意
Go言語のモジュールを管理で利用するファイル モジュール管理に利用しているファイルは以下2つ • go.mod ◦ モジュールも依存関係やバージョン情報を記録しているファイル • go.sum ◦ チェックサムを記録しているファイル
ライブラリ改ざんなどを検知できるが、個人開発の規模だと気にすることはない
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 )
モジュールの利用:標準モジュール モジュールを扱うときは「import」を利用し てモジュールを読み込む。 今回は標準モジュール「fmt」をつかって標 準出力に「Hello World」と表示している。 package main import "fmt"
func main() { fmt.Println("Hello World") }
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
モジュール利用:自作モジュール package main import ( =(中略)= "image-util/internal/s3" =(中略)= ) =(略)=
go.modで定義した自分自身のモジュール 名から始める必要がある以下に依存して いるわけではない • ディレクトリ名 • 相対的なパス 自分が「go mod init image-util」としていた ことを忘れていた(1敗)
まとめ • Go言語のパッケージ管理は「GoModule」で行っている • go.modファイルで依存関係を管理 • 自作モジュールを読み込むときには、自身のモジュール名を要確認
おわり