<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## Pipe-filter pattern ![](https://box.kancloud.cn/0a627d1cd99df5bbf529bf3031a9eb56_842x435.png) * 非常適合與數據處理及數據分析系統 * Filter 封裝數據處理的功能 * 松耦合: Filter只跟數據(格式)耦合 * Pipe用于連接Filter傳遞數據或者在異步處理過程中緩沖數據流進程內同步調用時,pipe演變為數據在方法調用間傳遞 示例,pipe處理流程: SplitFilter -> StringToIntFilter -> SumFilter filter.go ~~~ package pipefilter import "errors" type Request interface{} type Response interface{} type Filter interface { Process(data Request) (Response, error) } var DataTypeErr = errors.New("type error of data") var StringToIntErr = errors.New("string to int error") ~~~ split_filter.go ~~~ package pipefilter import ( "fmt" "strings" ) type SplitFilter struct { separator string } func NewSplitFilter(separator string) *SplitFilter { return &SplitFilter{separator} } func (filter *SplitFilter) Process(data Request) (Response, error) { fmt.Println("SplitFilter data:", data) result, ok := data.(string) if !ok { return nil, DataTypeErr } parts := strings.Split(result, filter.separator) return parts, nil } ~~~ string_to_int_filter.go ~~~ package pipefilter import ( "fmt" "strconv" ) type StringToIntFilter struct { } func NewStringToIntFilter() *StringToIntFilter { return new(StringToIntFilter) } func (filter *StringToIntFilter) Process(data Request) (Response, error) { fmt.Println("StringToIntFilter data:", data) parts, ok := data.([]string) if !ok { return nil, DataTypeErr } result := []int{} for _, str := range parts { num, err := strconv.Atoi(str) if err != nil { return nil, StringToIntErr } result = append(result, num) } return result, nil } ~~~ sum_filter.go ~~~ package pipefilter import "fmt" type SumFilter struct { } func NewSumFilter() *SumFilter { return new(SumFilter) } func (filter *SumFilter) Process(data Request) (Response, error) { fmt.Println("SumFilter data:", data) arr, ok := data.([]int) if !ok { return nil, DataTypeErr } summary := 0 for _, num := range arr { summary += num } return summary, nil } ~~~ pipeline.go ~~~ package pipefilter type PipeLine struct { Name string Filters *[]Filter } func NewPipeLine(name string, filters ...Filter) *PipeLine { return &PipeLine{ Name: name, Filters: &filters, } } func (pipe *PipeLine) Process(param Request) (Response, error) { var err error var data interface{} for _, filter := range *pipe.Filters { data, err = filter.Process(param) if err != nil { return data, err } param = data } return data, err } ~~~ filter_test.go ~~~ package pipefilter import "testing" func TestStringSplitFilter(t *testing.T) { pipe := NewPipeLine("pipeline", NewSplitFilter(","), NewStringToIntFilter(), NewSumFilter()) data := "1,3,5,7,9" result, err := pipe.Process(data) if err != nil { t.Error(err) } else { t.Log("result=>", result) } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看