介绍

  1. 对数据的操作进行多步骤的处理被称为链式处理。链式处理器是一种常见的编程设计。
  2. Netty 是使用 Java 语言编写的一款异步事件驱动的网络应用程序框架,支持快速开发可维护的高性能的面向协议的服务器和客户端,Netty 中就有类似的链式处理器的设计。
  3. Netty 可以使用类似的处理链对封包进行收发编码及处理,Netty 的开发者可以分为 3 种:第一种是 Netty 底层开发者;第二种是每个处理环节的开发者;第三种是业务实现者。在实际开发环节中,后两种开发者往往是同一批开发者,链式处理的开发思想将数据和操作拆分、解耦,让开发者可以根据自己的技术优势和需求,进行系统开发,同时将自己的开发成果共享给其他的开发者。



例子

本例中使用多个字符串作为数据集合,然后对每个字符串进行一系列的处理,用户可以通过系统函数或者自定义函数对链式处理中的每个环节进行自定义。

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // 自定义的移除前缀的处理函数
  7. func removePrefix(str string) string {
  8. return strings.TrimPrefix(str, "go")
  9. }
  10. // 字符串处理函数,传入字符串切片和处理链
  11. func StringProccess(list []string, chain []func(string) string) {
  12. // 遍历每一个字符串
  13. for index, str := range list {
  14. // 第一个需要处理的字符串
  15. result := str
  16. // 遍历每一个处理链
  17. for _, proc := range chain {
  18. // 输入一个字符串进行处理,返回数据作为下一个处理链的输入。
  19. result = proc(result)
  20. }
  21. // 将结果放回切片
  22. list[index] = result
  23. }
  24. }
  25. func main() {
  26. // 待处理的字符串列表
  27. list := []string{
  28. "go scanner",
  29. "go parser",
  30. "go compiler",
  31. "go printer",
  32. "go formater",
  33. }
  34. // 处理函数链
  35. chain := []func(string) string{
  36. removePrefix, // 移除 go 前缀
  37. strings.TrimSpace, // 移除空格
  38. strings.ToUpper, // 将字符串转为大写。
  39. }
  40. // 处理字符串
  41. StringProccess(list, chain)
  42. // 输出处理好的字符串
  43. for _, str := range list {
  44. fmt.Println(str)
  45. }
  46. }