Compare
- Compare只是提供一个方法,考虑性能的时候不建议调用
- 建议使用内建操作符
== > <
进行字符串的比较,效率更高,性能更好
|
|
Replace
replacer接口
- 抽象出来的所有replace方法都需要实现的接口
- 包含Replace方法和WriteString方法
- Replace方法完成s中字符串的替换
- WriteString方法在将s写入w中完成s字符串的替换操作
|
|
Replace结构体
- Replacer结构体完成字符串切片的替换,第一个字符串是旧的,第二个是匹配到替换为新的字符串
- Replacer是线程安全的,可以用于并发编程中,通过once参数来实现
- NewReplacer完成Replacer结构体的初始化
|
|
- Replace本身实现了replacer接口
- 实际上的替换操作是通过其参数r来完成的
- r.once.Do保证参数函数只被执行一次
- buildOnce函数完成对参数r的赋值,以及参数oldNew的置空操作
|
|
build方法
- build函数完成Replace中r的构造,根据oldnew内容的不通进行筛选
- 如果替换的新旧字符串长度为2,且被替换的字符串的长度>1,makeSingleStringReplacer完成替换
- 如果被替换的字符串不是单字节数据,则调用函数makeGenericReplacer构建通用的替换器
- 如果只是字节之间的替换,构造器为byteReplacer即可
- 如果是将单个字节替换为string字符串的情况,则byteStringReplacer可以完成替换能力
|
|
byteReplacer结构体
- byteReplacer结构体完成单个ASCII编码字节的替换
- Replace方法利用一个256大小的字节数组来完成字节的替换工作
- WriteString完成替换,并将替换之后的数据写入到w中
|
|
singleStringReplacer结构体
- singleStringReplacer结构体包含两个参数
- finder结构体用于进行字符串的查找
- value是查找到的字符串替换为的值
- makeSingleStringReplacer完成singleStringReplacer的构建
|
|
- Replace方法完成字符串的匹配替换
|
|
- WriteString将匹配之后的结果写入w中
|
|
byteStringReplacer 结构体
- byteStringReplacer完成字节替换成字符串的操作的结构体
- replacements记录字符和字符串之间的替换映射关系
- toReplace记录待替换的字符数组,以[]string格式记录
|
|
- Replace方法替换中会根据字符串的长度采用效率更高的方法来确认替换后的字符串需要的空间
- 然后遍历完成替换操作
|
|
- WriteString则直接进行循环替换并写入w中
|
|
genericReplacer结构体
- genericReplacer实际上是完整的通用算法,其余的各种分支是效率更高的快捷替换方法
- genericReplacer包含三个参数
- root节点,,类型时trieNode,Trie树的根节点
- tableSize int类型 trie树的查找表大小
- mapping 完成字节到trie树索引的映射
|
|
trieNode结构体
- trieNode是trie树的一个节点,含有5个参数
- value为节点key/value对中的值,如果当前节点不是一个完整的key的话,value为空
- priority 优先值,当前节点为完整路径时大于0,否则优先级为0
- prefix,next,如果这两个非空,则当前节点有一个子节点
- table,如果table非空,则其中记录了所有的子节点
|
|
- trieNode的add方法
|
|
Replace方法
- Replace方法实际上是对WriteString方法的调用,将s替换之后的结果写入到buf中
- buf实际上是对io.Writer接口的实现
|
|
WriteString方法
|
|