Go設(shè)計模式之迭代器模式講解和代碼示例
Go 迭代器模式講解和代碼示例
在迭代器的幫助下, 客戶端可以用一個迭代器接口以相似的方式遍歷不同集合中的元素。
示例
迭代器模式的主要思想是將集合背后的迭代邏輯提取至不同的、 名為迭代器的對象中。 此迭代器提供了一種泛型方法, 可用于在集合上進(jìn)行迭代, 而又不受其類型影響。
collection.go: 集合
package main type Collection interface { createIterator() Iterator }
userCollection.go: 具體集合
package main type UserCollection struct { users []*User } func (u *UserCollection) createIterator() Iterator { return &UserIterator{ users: u.users, } }
iterator.go: 迭代器
package main type Iterator interface { hasNext() bool getNext() *User }
userIterator.go: 具體迭代器
package main type UserIterator struct { index int users []*User } func (u *UserIterator) hasNext() bool { if u.index < len(u.users) { return true } return false } func (u *UserIterator) getNext() *User { if u.hasNext() { user := u.users[u.index] u.index++ return user } return nil }
user.go: 客戶端代碼
package main type User struct { name string age int }
main.go: 客戶端代碼
package main import "fmt" func main() { user1 := &User{ name: "a", age: 30, } user2 := &User{ name: "b", age: 20, } UserCollection := &UserCollection{ users: []*User{user1, user2}, } iterator := UserCollection.createIterator() for iterator.hasNext() { user := iterator.getNext() fmt.Printf("User is %+v \n", user) } }
output.txt: 執(zhí)行結(jié)果
User is &{name:a age:30}
User is &{name:b age:20}
到此這篇關(guān)于Go設(shè)計模式之迭代器模式講解和代碼示例的文章就介紹到這了,更多相關(guān)Go 迭代器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jaeger?Client?Go入門并實(shí)現(xiàn)鏈路追蹤
這篇文章介紹了Jaeger?Client?Go入門并實(shí)現(xiàn)鏈路追蹤的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03淺析Go語言如何在select語句中實(shí)現(xiàn)優(yōu)先級
這篇文章主要為大家詳細(xì)介紹了Go語言如何在select語句中實(shí)現(xiàn)優(yōu)先級,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Golang實(shí)現(xiàn)微信公眾號后臺接入的示例代碼
這篇文章主要介紹了Golang實(shí)現(xiàn)微信公眾號后臺接入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Golang JSON的進(jìn)階用法實(shí)例講解
這篇文章主要給大家介紹了關(guān)于Golang JSON進(jìn)階用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Golang實(shí)現(xiàn)根據(jù)某個特定字段對結(jié)構(gòu)體的順序進(jìn)行排序
這篇文章主要為大家詳細(xì)介紹了Golang如何實(shí)現(xiàn)根據(jù)某個特定字段對結(jié)構(gòu)體的順序進(jìn)行排序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Golang中String,rune和byte的相互轉(zhuǎn)換
Go語言中,string就是只讀的采用utf8編碼的字節(jié)切片,rune是int32的別名,代表字符的Unicode編碼,這篇文章主要介紹了Golang中String,rune和byte的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下2023-10-10