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
Tomoki Ota
September 11, 2024
Programming
0
98
【Go言語】イテレータ
Go1.23から追加されたイテレータについて解説しています。
今後増量予定。
Tomoki Ota
September 11, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
120
アーキテクチャとビジネスロジック
tomo1227
0
110
【Go言語】テスト
tomo1227
0
78
【Go言語】クロージャ
tomo1227
0
300
【Go言語】エラーハンドリング
tomo1227
0
81
AIに淘汰されないようにするには?
tomo1227
0
78
【Go言語】range
tomo1227
0
87
【Go言語】break
tomo1227
0
79
【Go言語】反復処理
tomo1227
0
57
Other Decks in Programming
See All in Programming
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
170
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.4k
あなたはユーザーではない #PdENight
kajitack
4
300
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
130
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.5k
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
220
CSC307 Lecture 12
javiergs
PRO
0
460
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
7.5k
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
680
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
150
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
110
ご飯食べながらエージェントが開発できる。そう、Agentic Engineeringならね。
yokomachi
1
280
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
130
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
220
Navigating Weather and Climate Data
rabernat
0
130
Producing Creativity
orderedlist
PRO
348
40k
Music & Morning Musume
bryan
47
7.1k
Un-Boring Meetings
codingconduct
0
220
How to train your dragon (web standard)
notwaldorf
97
6.5k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
460
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
130
Transcript
Tomoki Ota ʲGoݴޠʳΠςϨʔλ
ΠςϨʔλͱʁ ֎෦ΠςϨʔλ&෦ΠςϨʔλ Iteratorύλʔϯ Visitorύλʔϯ δΣωϨʔλ GoͷΠςϨʔλ ΞδΣϯμ 2
ΠςϨʔλͱʁ
ΠςϨʔλͱʁ 4 ΠςϨʔλ(෮ࢠ) : σʔλू߹ͷཁૉʹॱ൪ʹΞΫηε͢ΔͨΊͷΈ
ΠςϨʔλͱʁ 5 ίϨΫγϣϯͷཁૉͷྻڍɾ෮ͷํ๏ʹɺ2ͭͷํ͕ࣜ͋Δɻ •෦ΠςϨʔλ •֎෦ΠςϨʔλ
֎෦ΠςϨʔλ&෦ΠςϨʔλ
֎෦ΠςϨʔλ 7 ίϯςφͷཁૉΛॱʹऔΓग़ͨ͢ΊͷผͷΦϒδΣΫτΛ༻ҙ͢Δํࣜ(Java, C++ͳͲ) ίϯςφͷཁૉΛॱʹऔΓग़ͨ͢ΊͷผͷΦϒδΣΫτΛΠςϨʔλ(Χʔιϧ)ͱݺͿɻ •࣮͕͍͠ •ίʔυ͕ෳࡶ •ෳͷίϯςφ͔ΒҰͭͣͭཁૉΛऔΓग़͠ ฒߦʹॲཧ͢ΔΑ͏ͳखଓ͖͕ಘҙ
෦ΠςϨʔλ 8 ݸʑͷཁૉ͝ͱͷॲཧΛදݱ͢ΔͷΛίϯςφɾΦϒδΣΫτͷϝιουʹ͠ɼ ϝιου͕ཁૉ͝ͱͷॲཧΛݺͼฦ͢λΠϓͷ܁Γฦ͠ํࣜ(RubyͳͲ) • ͏ͷ࡞Δͷ؆୯ • Ϋϩʔδϟ͕ͳ͍ͱϧʔϓຊମͱ֎ଆͱͰใΛڞ༗͢ΔͨΊʹ ͕ඞཁʹͳΔͷͰɺ͍উख͕ѱ͘ͳΔɻ
Itaratorύλʔϯ
Itaratorύλʔϯ 10 GoFʹΑͬͯఆٛ͞ΕͨσβΠϯύλʔϯͷ1ͭɻ ΠςϨʔλΛ༻͢Δ͜ͱͰɺϦετɺ ελοΫɺ πϦʔͳͲͷ ࣮ࡍͷσʔλߏΛҙࣝͤͣʹɺཁૉΛ୳ࡧ͢Δ͜ͱ͕Ͱ͖Δɻ
Itaratorύλʔϯ 11 ந ۩
ItaratorύλʔϯͷϝϦοτ 12 • ୯Ұͷݪଇɻ ͔͞Δ୳ࡧΞϧΰϦζϜΛผΫϥεʹநग़͢Δ͜ͱʹΑΓ ΫϥΠΞϯτɾίʔυͱίϨΫγϣϯͷཧ͕Մೳ • ΦʔϓϯɾΫϩʔζυͷݪଇɻ ৽͍͠छྨͷίϨΫγϣϯͱΠςϨʔλʔΛ࣮͠ طଘͷίʔυʹͳ͘͢͜ͱ͕Մೳ
• ֤ΠςϨʔλʔɾΦϒδΣΫτ͕ࣗͷ෮ঢ়ଶΛ͍࣋ͬͯΔͨΊ ಉ͡ίϨΫγϣϯΛฏߦͯ͠෮Մೳ • ಉ͡ཧ༝Ͱɺ ෮ΛҰ࣌தஅͯ͠ඞཁͳ࣌ʹ࠶։͢Δ͜ͱ͕Մೳ
ItaratorύλʔϯͷϝϦοτ 13 •ΞϓϦ͕୯७ͳίϨΫγϣϯͱͷΈಈ࡞͢Δ߹ ͜ͷύλʔϯͷద༻ͳՄೳੑ͕͋Δ •ಛఆͷಛघͳίϨΫγϣϯͷ߹ɺ ΠςϨʔλʔͷ༻ ཁૉΛݟͯߦ͘ΑΓඇޮͳՄೳੑ͕͋Δ
Visitorύλʔϯ
Itaratorύλʔϯ v.s Visitorύλʔϯ 15 Itaratorύλʔϯ : ίϨΫγϣϯͷཁૉʹॱʹ̍ͭͣͭΞΫηε͢Δ Visitorύλʔϯ : ίϨΫγϣϯͷཁૉΛ̍ͭ̍ͭ८ͬͯɺԿΒ͔ͷॲཧΛ
ߦ͍ͬͯ͘
Itaratorύλʔϯ v.s Visitorύλʔϯ 16
δΣωϨʔλ
δΣωϨʔλͱ 18 ΠςϨʔλΛ؆୯ʹ࡞Δ͜ͱ͕Ͱ͖ΔɻΠςϨʔλΛฦؔ͢ δΣωϨʔλؔͱ͍͏ɻ ·ͨɺδΣωϨʔλؔͰ࡞͞ΕͨΠςϨʔλͷ͜ͱΛ δΣωϨʔλͱݺͿ͜ͱ͋Δɻ
GoͷΠςϨʔλ
range over int
range over int 21 Go1.22Ҏ߱ Go1.22Ҏલ
range over func
range over func 23 GoͷΠςϨʔλͷσϑΝΫτελϯμʔυ
v1.23ҎલͷΠςϨʔλ 24 database/sql.Rows archive/tar.Reader.Next
range over func 25 ҎԼͷγάωνϟͷؔΛrangeͰ෮ॲཧͰ͖Δɻ
range over func 26
range over func 27 rangeͰyieldΛ༻͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨɻ
GoͷΠςϨʔλ 28 • Push(ඪ४)ΠςϨʔλ : 1ͭͣͭσʔλΛ͢ • PullΠςϨʔλ : 1ͭͣͭσʔλΛड͚औΔ
func(func()bool) 29
30 func(func(V)bool)
func(func(K, V)bool) 31
iterύοέʔδ
iterύοέʔδ 33 https://github.com/golang/go/tree/go1.23.0/src/iter 1.23ͰՃ͞Εͨ
PushΠςϨʔλ 34
PushΠςϨʔλ 35
PushΠςϨʔλ 36 iter.Seq ͷ༰Λશͯը໘ʹදࣔ͢Δྫ
PushΠςϨʔλ 37
PushΠςϨʔλ 38
PullΠςϨʔλ 39
PullΠςϨʔλ 40 • PushܕͷΠςϨʔλΛPullܕʹม͢Δ • next ΠςϨʔλͷ࣍ͷͱɺ༗ޮͳ͕͋Δ͔Ͳ͏͔ͷਅِΛฦ͢ • stop ΠςϨʔλΛऴྃͤ͞Δ
• stop Λݺͼग़ͨ͠ޙɺnext ͔Βθϩͱfalse͕ৗʹฦΔ
PullΠςϨʔλ 41
ඪ४Ξμϓλؔ
Adapter 43 ͷγʔέϯεΛϑΟϧλʔͯ͠৽͍͠γʔέϯεΛฦؔ͢
Adapter 44