<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Iterator on omegaatt</title>
    <link>https://www.omegaatt.com/tags/iterator/</link>
    <description>Recent content in Iterator on omegaatt</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>zh-TW</language>
    <managingEditor>raiven.kao@gmail.com (Raiven Kao)</managingEditor>
    <webMaster>raiven.kao@gmail.com (Raiven Kao)</webMaster>
    <copyright>Raiven Kao 2020 - 2026</copyright>
    <lastBuildDate>Sat, 31 May 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.omegaatt.com/tags/iterator/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Golang Iterator 簡介與 samber/lo 比較</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/golang_iterator/</link>
      <pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/golang_iterator/</guid>
      <description>&lt;p&gt;自從 Golang 1.18 版本引入泛型（Generics）後，Go 語言的生態系統迎來了許多令人興奮的變化。其中，Golang 1.23 版本對 Iterator（迭代器）的標準化，以及 &lt;code&gt;iter&lt;/code&gt; 套件的加入，無疑是近期改動中相當重要的一環。本文將淺談 Golang Iterator 的基本概念，深入探討 Pure Iterator 與 Impure Iterator 之間的區別與設計考量，並與社群中流行的 &lt;code&gt;samber/lo&lt;/code&gt; 工具庫進行比較。&lt;/p&gt;
&lt;h2 id=&#34;什麼是-iterator&#34;&gt;什麼是 Iterator？&lt;/h2&gt;
&lt;p&gt;Iterator Pattern（迭代器模式）是一種常見的設計模式，它提供了一種循序存取集合物件中各個元素的方法，而又無需暴露該物件的內部表示。簡單來說，Iterator 就像一個指針，可以依序指向集合中的下一個元素，直到遍歷完所有元素為止。&lt;/p&gt;
&lt;h2 id=&#34;golang-中的-iterator&#34;&gt;Golang 中的 Iterator&lt;/h2&gt;
&lt;p&gt;在 Golang 1.23 之前，我們通常透過 &lt;code&gt;for-range&lt;/code&gt; 迴圈來迭代 array、slice、string、map、channel 等內建資料結構。然而，對於自訂的資料結構或複雜的序列生成邏輯，缺乏一個統一的迭代標準。&lt;/p&gt;
&lt;p&gt;Golang 1.23 版本正式將 Iterator 標準化，並在標準庫中加入了 &lt;code&gt;iter&lt;/code&gt; 套件。同時，&lt;code&gt;slices&lt;/code&gt; 和 &lt;code&gt;maps&lt;/code&gt; 套件也增加了一些回傳 Iterator 的工廠函數（Iterator Factories）。到了 Golang 1.24，更有如 &lt;code&gt;strings.SplitSeq&lt;/code&gt; 等函數加入，進一步豐富了 Iterator 的應用場景。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// strings.SplitSeq 回傳一個迭代器，用於遍歷由 sep 分隔的 s 子字串。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 此迭代器產生的字串與 Split(s, sep) 回傳的相同，但不會建構整個 slice。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 它回傳一個單次使用的迭代器。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SplitSeq&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;iter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Seq&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果對 Golang 1.23+ 中 Iterator 的語法和語義還不熟悉，建議可以閱讀 Ian Lance Taylor 在 Go 官方部落格發表的&lt;a href=&#34;https://go.dev/blog/range-functions&#34;&gt;介紹文章&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
