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 get で考慮している ファイルシステムの挙動について
Search
shinnosuke
June 08, 2024
Technology
3
640
go get で考慮している ファイルシステムの挙動について
Go Conference 2024:
https://gocon.jp/2024
shinnosuke
June 08, 2024
Tweet
Share
More Decks by shinnosuke
See All by shinnosuke
システムと組織の課題克服を目指すリアーキテクチャとユーザ移行
shinnosuke_kishida
0
12
「プログラマー脳」を読んで感覚的な部分が言語化された
shinnosuke_kishida
1
550
広告代理店向けSaaSの開発をしている新卒3年目のこれまでのお話
shinnosuke_kishida
0
34
Ebitengineのイベントで発表するのでEbitengineを初めて触ってみた
shinnosuke_kishida
0
2.2k
只今、絶賛リプレイス中のシステムの取り組みについて
shinnosuke_kishida
1
620
仕事で使っているものを紹介します
shinnosuke_kishida
2
810
Other Decks in Technology
See All in Technology
AWS Storage Gatewayで始めるセキュアなデータ連携 / Secure data linkage with AWS Storage Gateway
yuj1osm
2
180
良い開発のためにまず組織を設計せい
ichimichi
7
3.3k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
1.7k
【ServiceNow SNUG Meetup LT deck】まだまだ楽しむKnowledge2024 オンラインでも体験できるCREATERCONの魅力と新機能
senon
0
110
Cleanup handling in Go / Go Conference 2024
k1low
6
2.2k
自動テストは何の役に立つのか そして役に立たないのか
undefined_name
5
1.2k
明日使えるかもしれないLoss Functionsのアイディアと実装
ftakahashi
PRO
3
240
VMをPodで起動するKubeVirtの真髄 / KubeVirt
tutsunom
1
280
Redmineチューニングの実際と限界 - Redmine performance tuning
akahane92
10
15k
VS CodeとVimが好きなエンジニアが考えた最強のエディタ
miura55
0
130
Unified Diff 形式の差分から Go AST を構築して feature flag を自動計装する
biwashi
9
890
Oracle Database 23ai Overview
oracle4engineer
PRO
0
560
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
46
12k
Making Projects Easy
brettharned
110
5.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
243
1.2M
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Agile that works and the tools we love
rasmusluckow
325
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
21
1.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
247
20k
Testing 201, or: Great Expectations
jmmastey
32
6.8k
Building Your Own Lightsaber
phodgson
101
5.8k
Designing the Hi-DPI Web
ddemaree
276
33k
Being A Developer After 40
akosma
68
580k
Transcript
go get で考慮している ファイルシステムの挙動について Go Conference 2024 @mwudo / 岸田慎之介
2 自己紹介 • SO Technologies 株式会社 • Go言語でAPI/バッチ処理の開発を主に行いつつ 問い合わせの調査も行っている グループ横断の取り組みで使うアプリの開発にも従事
• 毎週ボルダリングに通ってる 岸田 慎之介 @mwudo
概要 3 ファイルシステムのとある挙動を go get では どのように考慮しているかコードを交えて紹介 ※ 紹介するコードは 2024/06/07
時点での release-branch.go1.22 の実装 macOS で検証
go get の仕組みを簡単に紹介 4
go get の仕組みを簡単に紹介 5 タグを指定しない場合を例に 引用:The Go Blog 「Module Mirror
and Checksum Database Launched」 1. バージョンのリストを取得 2. 最新のタグのメタ情報を取得 3. 依存関係にある mod ファイル等を取得 4. zip ファイルとしてダウンロード
go get の仕組みを簡単に紹介 6 引用:The Go Blog 「Module Mirror and
Checksum Database Launched」 1. バージョンのリストを取得 2. 最新のタグのメタ情報を取得 3. 依存関係にある mod ファイル等を取得 4. zip ファイルとしてダウンロード タグを指定しない場合を例に
go get の仕組みを簡単に紹介 7 引用:The Go Blog 「Module Mirror and
Checksum Database Launched」 1. バージョンのリストを取得 2. 最新のタグのメタ情報を取得 3. 依存関係にある mod ファイル等を取得 4. zip ファイルとしてダウンロード タグを指定しない場合を例に
go get の仕組みを簡単に紹介 8 引用:The Go Blog 「Module Mirror and
Checksum Database Launched」 1. バージョンのリストを取得 2. 最新のタグのメタ情報を取得 3. 依存関係にある mod ファイル等を取得 4. zip ファイルとしてダウンロード タグを指定しない場合を例に
go get の仕組みを簡単に紹介 9 引用:The Go Blog 「Module Mirror and
Checksum Database Launched」 1. バージョンのリストを取得 2. 最新のタグのメタ情報を取得 3. 依存関係にある mod ファイル等を取得 4. zip ファイルとしてダウンロード タグを指定しない場合を例に
go get の仕組みを簡単に紹介 zip ファイルとしてダウンロードされたあと解凍され ローカル環境にディレクトリ・ファイルが保存される 保存先の OS の ファイルシステムの影響
を受ける 10
go get の仕組みを簡単に紹介 macOS だと 11
go get の仕組みを簡単に紹介 少なくとも macOS では大文字・小文字を区別しない設定を存在する 大文字・小文字が混在しても go get できる
仕組み が必要 12
ファイルシステムの考慮をどのように行っているのか 13
ファイルシステムの考慮をどのように行っているのか src/cmd/go/main.go の init 関数で各コマンドを登録 14
ファイルシステムの考慮をどのように行っているのか src/cmd/go/main.go の init 関数で各コマンドを登録 お目当てのコマンド 15
ファイルシステムの考慮をどのように行っているのか src/cmd/go/internal/modget/get.go 16 go get 時に指定したライブラリを goroutine で取得
cmd/go/internal/modload/import.go ファイルシステムの考慮をどのように行っているのか いくつかの処理を経由してライブラリを取得する処理が実行される ・ ・ ・ 17
18 ファイルシステムの考慮をどのように行っているのか キャッシュを使いながらダウンロード cmd/go/internal/modfetch/fetch.go
ファイルシステムの考慮をどのように行っているのか zip ファイルをダウンロード 19
ファイルシステムの考慮をどのように行っているのか 保存するディレクトリを指定 cmd/go/internal/modfetch/cache.go 20
ファイルシステムの考慮をどのように行っているのか cmd/vendor/golang.org/x/mod/module/module.go 21
ファイルシステムの考慮をどのように行っているのか cmd/vendor/golang.org/x/mod/module/module.go 22 大文字の考慮
ファイルシステムの考慮をどのように行っているのか 23 実際に大文字を持つリポジトリ(今回は DataDog)を go get して ダウンロードされるディレクトリ($GOPATH/pkg/mod)を見ると
どのように処理の流れを追って理解していったのか (方法の一つとして参考してもらえれば) 24
どのように処理の流れを追って理解していったのか ある程度当たりをつけて処理を探した 25 1 今回は go get の挙動についてだったので、 ❏ get
が付いているファイル or 関数があるはず ❏ modget というディレクトリに get.go というファイルがあった ❏ 処理を追ってもあまり処理を理解できなかった IDE の力を借りるべく Go の実装を手元にダウンロードした 0
どのように処理の流れを追って理解していったのか 関数の引数渡されている変数の情報を確認 26 2 ❏ 難しいことはせず、fmt.Println とかを埋め込んだ ❏ panic を埋め込んでスタックトレースみたり(これが一番理解がすすんだ)
❏ 自分で改造した Go をビルドするのは簡単だった 参考:Install Go
go build 時の挙動だったり Go version 1 との比較とかも機会があれば 業務時の軽い雑談で紹介した挙動を偶然見つけて 初めて Go
のソースコードを読んだ まとめ GitHub だと大文字・小文字違いのアカウントは作成できないので ほとんど起きない現象なのかもしれない 27
❏ The Go Blog 「Module Mirror and Checksum Database Launched」
❏ GopherCon 2019: Katie Hockman - Go Module Proxy: Life of a Query ❏ Go Module Mirror, Index, and Checksum Database ❏ Macのディスクユーティリティで利用できるファイルシステムフォーマット ❏ Installing Go from source 参考