<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          go-itergen代碼生成工具

          聯(lián)合創(chuàng)作 · 2023-09-28 03:29

          go-itergen 解決了 Go 一個(gè)常規(guī)而又非常重要的問題:沒有映射,沒有過濾器,什么都沒有。如果你是函數(shù)式背景會(huì)感到非??鄲?,現(xiàn)在 got-itergen 提供 Go 的常規(guī)函數(shù)生成功能,為可迭代的類型生成常規(guī)函數(shù),比如 map 和 filter。

          go-itergen 支持的操作:

          • Map

          • Filter

          • All

          • Some

          • Concat

          • Find

          • ForEach

          • Reverse

          • Splice

          • Reduce

          生成代碼:

          //go:generate go-itergen -t "float64" --pkg="mypkg" --map="string" --map="int" --filter --all --some --foreach --concat --find --reverse --splice --reduce="string" --reduce="int"

          代碼示例:

          package mypkg
          import (
              "errors"
          )
          type Float64Iter []float64
          func NewFloat64Iter(items ...float64) Float64Iter {
              return Float64Iter(items)
          }
          type Float64IterMapResult []interface{}
          func (i Float64Iter) Map(fn func(int, float64) interface{}) Float64IterMapResult {
              var result []interface{}
              for n, item := range i {
                  result = append(result, fn(n, item))
              }
              return result
          }
          var ErrFloat64ToFloat64 = errors.New("cannot convert Float64IterMapResult to []float64")
          func (r Float64IterMapResult) Iter() (Float64Iter, error) {
              var result []float64
              for _, i := range r {
                  if _, ok := i.(float64); !ok {
                      return nil, ErrFloat64ToFloat64
                  }
                  result = append(result, i.(float64))
              }
              return Float64Iter(result), nil
          }
          var ErrFloat64ToString = errors.New("cannot convert Float64IterMapResult to []string")
          func (r Float64IterMapResult) ToString() ([]string, error) {
              var result []string
              for _, i := range r {
                  if _, ok := i.(string); !ok {
                      return nil, ErrFloat64ToString
                  }
                  result = append(result, i.(string))
              }
              return result, nil
          }
          var ErrFloat64ToInt = errors.New("cannot convert Float64IterMapResult to []int")
          func (r Float64IterMapResult) ToInt() ([]int, error) {
              var result []int
              for _, i := range r {
                  if _, ok := i.(int); !ok {
                      return nil, ErrFloat64ToInt
                  }
                  result = append(result, i.(int))
              }
              return result, nil
          }
          func (i Float64Iter) Filter(fn func(float64) bool) Float64Iter {
              var result []float64
              for _, item := range i {
                  if fn(item) {
                      result = append(result, item)
                  }
              }
              return Float64Iter(result)
          }
          func (i Float64Iter) All(fn func(float64) bool) bool {
              for _, item := range i {
                  if !fn(item) {
                      return false
                  }
              }
              return true
          }
          func (i Float64Iter) Some(fn func(float64) bool) bool {
              for _, item := range i {
                  if fn(item) {
                      return true
                  }
              }
              return false
          }
          func (i Float64Iter) ForEach(fn func(int, float64) interface{}) {
              for n, item := range i {
                  fn(n, item)
              }
          }
          func (i Float64Iter) Concat(i2 Float64Iter) Float64Iter {
              return append(i, i2...)
          }
          func (i Float64Iter) Find(fn func(float64) bool) (float64, int) {
              var zero float64
              for i, item := range i {
                  if fn(item) {
                      return item, i
                  }
              }
              return zero, -1
          }
          func (i Float64Iter) Reverse() Float64Iter {
              var result []float64
              for j := len(i) - 1; j >= 0; j-- {
                  result = append(result, i[j])
              }
              return result
          }
          // Splice removes numDelete items from the slice
          // since start. If numDelete is -1 it will delete all
          // items after start. If start is higher than the
          // slice length or lower than 0 the whole slice
          // will be returned.
          func (i Float64Iter) Splice(start, numDelete int) Float64Iter {
              var result Float64Iter
              length := len(i)
              if start >= length-1 || start < 0 {
                  return i
              }
              result = append(result, i[:start]...)
              if numDelete > -1 && numDelete+start < length {
                  result = append(result, i[start+numDelete:]...)
              }
              return result
          }
          func (i Float64Iter) ReduceInt(fn func(current float64, acc int, index int) int, initial int) int {
              var result = initial
              for idx, item := range i {
                  initial = fn(item, result, idx)
              }
              return result
          }
          func (i Float64Iter) ReduceString(fn func(current float64, acc string, index int) string, initial string) string {
              var result = initial
              for idx, item := range i {
                  initial = fn(item, result, idx)
              }
              return result
          }
          func main() {
            rounded, err := NewFloat64Iter(1.2, 2.4, 3.5, 5.6).Filter(func(n float64) bool {
                  return n > 2.0
              }).Map(func(int i, n float64) interface{} {
              return int(n)
            }).ToInt()
            fmt.Println(rounded) // [3 5]
          }
          瀏覽 11
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费视频色情 | 亚洲成人网站观看 | 大香蕉伊人网站 | 爱伊人久久 | 国产精品麻豆果冻莉莉 |