Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【Go言語】イテレータ
Search
Tomoki Ota
September 11, 2024
Programming
0
78
【Go言語】イテレータ
Go1.23から追加されたイテレータについて解説しています。
今後増量予定。
Tomoki Ota
September 11, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
110
アーキテクチャとビジネスロジック
tomo1227
0
100
【Go言語】テスト
tomo1227
0
64
【Go言語】クロージャ
tomo1227
0
280
【Go言語】エラーハンドリング
tomo1227
0
66
AIに淘汰されないようにするには?
tomo1227
0
69
【Go言語】range
tomo1227
0
77
【Go言語】break
tomo1227
0
68
【Go言語】反復処理
tomo1227
0
45
Other Decks in Programming
See All in Programming
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
610
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
580
ゲームの物理 剛体編
fadis
0
370
ゆくKotlin くるRust
exoego
1
160
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
440
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
320
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
190
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
110
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
370
AIコーディングエージェント(Gemini)
kondai24
0
270
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
210
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Git: the NoSQL Database
bkeepers
PRO
432
66k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
150
The SEO Collaboration Effect
kristinabergwall1
0
310
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Designing Experiences People Love
moore
143
24k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
170
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
A better future with KSS
kneath
240
18k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
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