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
240
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
AIを「完全に理解」するG検定合格体験記
ih6109
1
68
2022_07_14_おすすめの技術書 LT会 - vol.4_ 問題解決を仕事にする 全ての人へ
ih6109
0
110
Kotlinでサーバーレス! 「Kotless」の紹介
ih6109
1
560
2021_08_19 おすすめの技術書 LT会 - vol.2 Vue.js3超入門がとにかくやさしい
ih6109
0
22k
Other Decks in Programming
See All in Programming
CSC305 Lecture 01
javiergs
PRO
1
400
CSC509 Lecture 06
javiergs
PRO
0
240
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
150
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
500
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
350
明日から始めるリファクタリング
ryounasso
0
120
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
340
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
400
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
140
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
460
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
680
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
240
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.6k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Writing Fast Ruby
sferik
629
62k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
Producing Creativity
orderedlist
PRO
347
40k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
A Tale of Four Properties
chriscoyier
160
23k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
How to train your dragon (web standard)
notwaldorf
96
6.3k
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ファイルで依存関係を管理 • 自作モジュールを読み込むときには、自身のモジュール名を要確認
おわり