最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang?流水線設計模式實踐示例詳解

 更新時間:2023年12月18日 14:08:33   作者:俞凡  
這篇文章主要為大家介紹了Golang?流水線設計模式實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

流水線設計模式

流水線設計模式對于順序處理業(yè)務數(shù)據(jù)非常有用,可以以一致的方式直觀的定義對數(shù)據(jù)的處理流程。

到目前為止,我已經(jīng)將 Golang 整合到項目中有一段時間了,Golang 是一種非常強大的語言,我渴望在其生態(tài)系統(tǒng)中進一步磨練技能。

基于項目的特定需求,我需要實現(xiàn)流水線模式(Pipeline Pattern),數(shù)據(jù)需要通過多個過濾器,以順序的方式進行處理。讓我解釋一下:

假設我們有一個很長的字符串。第一步是根據(jù)特定標準對其進行解析。接下來,需要對解析后的數(shù)據(jù)進行一些調(diào)整。隨后,將解析后的數(shù)據(jù)保存到數(shù)據(jù)庫中。正如你所見,有多個任務需要處理,而每個任務都是相互關聯(lián)的。

基礎流水線

在軟件開發(fā)中,可以用流水線設計模式(pipeline design pattern) 來管理這種場景,該模式是為順序處理對象修改而設計的。想象有一條裝配流水線,每個工位都是一段"管道(pipe)",當某個物體通過整個流水線后,就發(fā)生了變化。從本質(zhì)上講,流水線負責將值通過一系列可調(diào)用的"管道(pipe)"(無論是中間件、過濾器還是處理器)進行順序傳遞。在將該值傳遞給序列中的后續(xù)管道之前,每個管道段都有可能改變該值。該模式在諸如請求處理、數(shù)據(jù)處理或轉(zhuǎn)換等場景中特別有用,提供了一種干凈、可維護和可測試的方法。

作為解決方案,我準備了一個簡單的 Golang 包,可以在處理流程中使用流水線模式,它建立在責任鏈(chain of responsibility, CoR) 設計模式之上,可以將其安裝到項目中并使用:

go get github.com/izniburak/pipeline-go

包安裝之后,可以做一個簡單演示。首先需要一些新的結(jié)構(gòu)體,這些結(jié)構(gòu)體具有從PipeInterface實現(xiàn)的Handle方法。因為 pipeline 包需要多個流水線,所以我們用Handle方法來運行每個流水線:

package main
import (
 "strings"
 "github.com/izniburak/pipeline-go"
)
type UpperCasePipe struct{}
func (u *UpperCasePipe) Handle(value pipeline.PipeValue, next pipeline.PipeNext) pipeline.PipeValue {
  // get value
  text := value.(string)
  capitalized := strings.ToUpper(text)
  return next(capitalized)
}
type TrimSpacePipe struct{}
func (t *TrimSpacePipe) Handle(value pipeline.PipeValue, next pipeline.PipeNext) pipeline.PipeValue {
  // get value
  text := value.(string)
  trimmed := strings.Trim(text, " ")
  return next(trimmed)
}

使用流水線

package main
import (
 "fmt"
 "strings"
 "github.com/izniburak/pipeline-go"
)
type UpperCasePipe struct{}
func (u *UpperCasePipe) Handle(value pipeline.PipeValue, next pipeline.PipeNext) pipeline.PipeValue {
  // get value
  text := value.(string)
  capitalized := strings.ToUpper(text)
  return next(capitalized)
}
type TrimSpacePipe struct{}
func (t *TrimSpacePipe) Handle(value pipeline.PipeValue, next pipeline.PipeNext) pipeline.PipeValue {
  // get value
  text := value.(string)
  trimmed := strings.Trim(text, " ")
  return next(trimmed)
}
func main() {
  text := "   buki.dev   "
  pipes := []pipeline.PipeInterface{
    new(UpperCasePipe),
    new(TrimSpacePipe),
  }
  result := pipeline.Send(text).Through(pipes).ThenReturn()
  fmt.Println(result) // BUKI.DEV
}

如你所見,我們使用了兩個不同的管道,分別是UpperCasePipeTrimSpacePipe。輸入是 buki.dev ,兩邊都有空格,輸出是BUKI.DEV。

就是這樣。流水線非常有用,是吧?

可以在 GitHub 上查看 pipeline包

以上就是Golang 流水線設計模式實踐示例詳解的詳細內(nèi)容,更多關于Golang 流水線設計模式的資料請關注腳本之家其它相關文章!

相關文章

  • go實現(xiàn)base64編碼的四種方式

    go實現(xiàn)base64編碼的四種方式

    本文主要介紹了go實現(xiàn)base64編碼的四種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Golang搭建grpc環(huán)境的流程步驟

    Golang搭建grpc環(huán)境的流程步驟

    這篇文章主要給大家介紹了Golang搭建grpc環(huán)境的流程步驟,文中通過圖文結(jié)合的方式給大家講解的非常詳細,對大家了解Golang搭建grpc環(huán)境有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • golang生成vcf通訊錄格式文件詳情

    golang生成vcf通訊錄格式文件詳情

    這篇文章主要介紹了golang生成vcf通訊錄格式文件詳情,?VCF是通訊錄格式文件,一般需要用手機通訊錄導入導出的文件格式都是vcf格式。?下面詳細內(nèi)容介紹需要的小伙伴可以參考一下
    2022-03-03
  • golang中json反序列化可能遇到的問題

    golang中json反序列化可能遇到的問題

    這篇文章主要給大家介紹了關于golang中json反序列化可能遇到的問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • Go并發(fā)與鎖的兩種方式該如何提效詳解

    Go并發(fā)與鎖的兩種方式該如何提效詳解

    如果沒有鎖,在我們的項目中,可能會存在多個goroutine同時操作一個資源(臨界區(qū)),這種情況會發(fā)生競態(tài)問題(數(shù)據(jù)競態(tài)),下面這篇文章主要給大家介紹了關于Go并發(fā)與鎖的兩種方式該如何提效的相關資料,需要的朋友可以參考下
    2022-12-12
  • Golang實現(xiàn)短網(wǎng)址/短鏈服務的開發(fā)筆記分享

    Golang實現(xiàn)短網(wǎng)址/短鏈服務的開發(fā)筆記分享

    這篇文章主要為大家詳細介紹了如何使用Golang實現(xiàn)短網(wǎng)址/短鏈服務,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-05-05
  • Go語言基礎函數(shù)包的使用學習

    Go語言基礎函數(shù)包的使用學習

    本文通過一個實現(xiàn)加減乘除運算的小程序來介紹go函數(shù)的使用,以及使用函數(shù)的注意事項,并引出了對包的了解和使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go 實現(xiàn)一次性打包各個平臺的可執(zhí)行程序

    Go 實現(xiàn)一次性打包各個平臺的可執(zhí)行程序

    這篇文章主要介紹了Go 實現(xiàn)一次性打包各個平臺的可執(zhí)行程序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoLang中生成UUID唯一標識的實現(xiàn)方法

    GoLang中生成UUID唯一標識的實現(xiàn)方法

    UUID是讓分散式系統(tǒng)中的所有元素,都能有唯一的辨識信息,本文主要介紹了GoLang中生成UUID唯一標識的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • GoLang抽獎系統(tǒng)簡易實現(xiàn)流程

    GoLang抽獎系統(tǒng)簡易實現(xiàn)流程

    這篇文章主要介紹了GoLang抽獎系統(tǒng)實現(xiàn)流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12

最新評論

翼城县| 衡阳市| 铅山县| 酉阳| 筠连县| 金寨县| 平顺县| 徐闻县| 邵武市| 贵南县| 安义县| 文化| 孟州市| 融水| 屏东市| 合肥市| 剑阁县| 喀什市| 曲麻莱县| 湖口县| 天峨县| 余庆县| 鲜城| 北辰区| 汉源县| 琼结县| 舟曲县| 海盐县| 德保县| 喜德县| 昔阳县| 余干县| 辛集市| 安化县| 洮南市| 招远市| 双流县| 汨罗市| 内丘县| 津市市| 隆安县|