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
190
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
500
2021_08_19 おすすめの技術書 LT会 - vol.2 Vue.js3超入門がとにかくやさしい
ih6109
0
21k
Other Decks in Programming
See All in Programming
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
240
Zoneless Testing
rainerhahnekamp
0
120
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
430
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
130
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
命名をリントする
chiroruxx
1
390
暇に任せてProxmoxコンソール 作ってみました
karugamo
1
720
42 best practices for Symfony, a decade later
tucksaun
1
180
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
210
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
66
4.5k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Why Our Code Smells
bkeepers
PRO
335
57k
Docker and Python
trallard
42
3.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
A Philosophy of Restraint
colly
203
16k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
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ファイルで依存関係を管理 • 自作モジュールを読み込むときには、自身のモジュール名を要確認
おわり