Go設(shè)計模式之迭代器模式講解和代碼示例
Go 迭代器模式講解和代碼示例
在迭代器的幫助下, 客戶端可以用一個迭代器接口以相似的方式遍歷不同集合中的元素。
示例
迭代器模式的主要思想是將集合背后的迭代邏輯提取至不同的、 名為迭代器的對象中。 此迭代器提供了一種泛型方法, 可用于在集合上進行迭代, 而又不受其類型影響。
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)文章
一文帶你吃透Golang中net/http標準庫服務(wù)端
這篇文章將從服務(wù)端(Server)作為切入點和大家分享一下Go語言net/http標準庫的實現(xiàn)邏輯,進而一步步分析http標準庫內(nèi)部是如何運作的,感興趣的可以了解下2024-03-03
Go語言通過chan進行數(shù)據(jù)傳遞的方法詳解
這篇文章主要為大家詳細介紹了Go語言如何通過chan進行數(shù)據(jù)傳遞的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06
golang基于websocket實現(xiàn)的簡易聊天室程序
這篇文章主要介紹了golang基于websocket實現(xiàn)的簡易聊天室,分析了websocket的下載、安裝及使用實現(xiàn)聊天室功能的相關(guān)技巧,需要的朋友可以參考下2016-07-07

