Go設(shè)計(jì)模式之迭代器模式講解和代碼示例
Go 迭代器模式講解和代碼示例
在迭代器的幫助下, 客戶端可以用一個(gè)迭代器接口以相似的方式遍歷不同集合中的元素。
示例
迭代器模式的主要思想是將集合背后的迭代邏輯提取至不同的、 名為迭代器的對(duì)象中。 此迭代器提供了一種泛型方法, 可用于在集合上進(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è)計(jì)模式之迭代器模式講解和代碼示例的文章就介紹到這了,更多相關(guān)Go 迭代器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jaeger?Client?Go入門并實(shí)現(xiàn)鏈路追蹤
這篇文章介紹了Jaeger?Client?Go入門并實(shí)現(xiàn)鏈路追蹤的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
淺析Go語言如何在select語句中實(shí)現(xiàn)優(yōu)先級(jí)
這篇文章主要為大家詳細(xì)介紹了Go語言如何在select語句中實(shí)現(xiàn)優(yōu)先級(jí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Golang實(shí)現(xiàn)微信公眾號(hào)后臺(tái)接入的示例代碼
這篇文章主要介紹了Golang實(shí)現(xiàn)微信公眾號(hào)后臺(tái)接入的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Golang JSON的進(jìn)階用法實(shí)例講解
這篇文章主要給大家介紹了關(guān)于Golang JSON進(jìn)階用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Golang實(shí)現(xiàn)根據(jù)某個(gè)特定字段對(duì)結(jié)構(gòu)體的順序進(jìn)行排序
這篇文章主要為大家詳細(xì)介紹了Golang如何實(shí)現(xiàn)根據(jù)某個(gè)特定字段對(duì)結(jié)構(gòu)體的順序進(jìn)行排序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Golang中String,rune和byte的相互轉(zhuǎn)換
Go語言中,string就是只讀的采用utf8編碼的字節(jié)切片,rune是int32的別名,代表字符的Unicode編碼,這篇文章主要介紹了Golang中String,rune和byte的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下2023-10-10

