Documentation
¶
Index ¶
- func FormatDiff(diff Diff) string
- func FormatDiffs(diffs []Diff) string
- func FormatDiffsSummary(diffs []Diff) string
- func GraphSort(names []string, depGraph map[string]map[string]struct{}) ([]string, error)
- func TravelMap(m map[string]any, f func(k string, v any) error) error
- func TravelMapEx(m map[string]any, parentKey []any, f func(k []any, v any) error) error
- func TraverseString(s string, separatorChars string, callback CallbackFunc) error
- func WalkMapLeaves(root map[string]any, f func(path string, v any) error) error
- type CallbackFunc
- type Diff
- type WordInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FormatDiff ¶
func FormatDiffs ¶
func FormatDiffsSummary ¶
FormatDiffsSummary formats the difference summary Example return: "Added(2): [key1, key2], Deleted(1): [key3], Modified(3): [key4, key5, key6]" Returns "No changes" if there are no differences
func GraphSort ¶
GraphSort 执行拓扑排序,根据依赖关系对元素进行排序。
参数:
- names: 需要排序的元素名称列表
- depGraph: 依赖关系图,key 为元素名称,value 为该元素的依赖集合
返回值:
- []string: 排序后的元素列表(按依赖关系从无依赖到有依赖排列)
- error: 如果检测到循环依赖,返回错误信息
用法:
names := []string{"a", "b", "c"}
deps := map[string]map[string]struct{}{
"b": {"a": {}}, // b 依赖 a
"c": {"a": {}, "b": {}}, // c 依赖 a 和 b
}
sorted, err := GraphSort(names, deps)
// sorted = ["a", "b", "c"]
局限:
- 如果存在循环依赖,返回错误
- 时间复杂度: O(n + m),其中 n 是元素数量,m 是依赖关系数量
- 不修改输入的 names 列表,但会修改 depGraph(清空其内容)
func TravelMap ¶
TravelMap 递归遍历嵌套的 Map 结构,对每个键值对调用回调函数。
参数:
- m: 需要遍历的 Map
- f: 回调函数,接收键名和值
返回值:
- error: 如果回调函数返回错误,立即返回该错误
用法:
data := map[string]any{
"name": "John",
"profile": map[string]any{
"age": 30,
},
}
TravelMap(data, func(k string, v any) error {
fmt.Printf("Key: %s, Value: %v\n", k, v)
return nil
})
局限:
- 只支持 map[string]any 和 []any 类型的嵌套
- 不支持其他类型的嵌套结构
- 回调函数返回错误时会中断遍历
- 不保证遍历顺序(Map 的遍历顺序是随机的)
func TravelMapEx ¶
TravelMapEx 递归遍历嵌套的 Map 结构,并提供完整的路径信息。
参数:
- m: 需要遍历的 Map
- parentKey: 父节点的路径(初次调用时传 nil)
- f: 回调函数,接收完整路径和值
返回值:
- error: 如果回调函数返回错误,立即返回该错误
用法:
data := map[string]any{
"users": []any{
map[string]any{"name": "John"},
},
}
TravelMapEx(data, nil, func(keys []any, v any) error {
path := ""
for _, k := range keys {
if s, ok := k.(string); ok {
path += "." + s
} else if i, ok := k.(int); ok {
path += fmt.Sprintf("[%d]", i)
}
}
fmt.Printf("Path: %s, Value: %v\n", path, v)
return nil
})
局限:
- 路径中的元素可以是 string(Map 键)或 int(数组索引)
- 只支持 map[string]any 和 []any 类型的嵌套
- 回调函数返回错误时会中断遍历
- 不保证遍历顺序(Map 的遍历顺序是随机的)
func TraverseString ¶
func TraverseString(s string, separatorChars string, callback CallbackFunc) error
TraverseString 对字符串进行分词,对每个单词调用回调函数。
参数:
- s: 需要分词的字符串
- separatorChars: 分隔符字符集(除了空格外的其他分隔符)
- callback: 回调函数,对每个单词(包括空单词)调用
返回值:
- error: 如果回调函数返回错误,立即返回该错误
用法:
text := "hello,world;test"
TraverseString(text, ",;", func(w *WordInfo) error {
if w.Word != "" {
fmt.Printf("Word: %s at pos %d\n", w.Word, w.Pos)
}
return nil
})
局限:
- 回调函数返回错误时会中断遍历
- 空格和 separatorChars 中的字符都被视为分隔符
- 连续的分隔符会被合并为一个 Separator
WordInfo 字段说明:
- Word: 单词内容(可能为空字符串)
- Pos: 单词在原字符串中的起始位置
- Separator: 单词后的分隔符
- Index: 单词的序号
func WalkMapLeaves ¶
WalkMapLeaves 遍历 Map 的所有叶子节点(非容器类型的值)。
参数:
- root: 需要遍历的根 Map
- f: 回调函数,接收路径和叶子节点的值
返回值:
- error: 如果回调函数返回错误,立即返回该错误
用法:
data := map[string]any{
"user": map[string]any{
"name": "John",
"age": 30,
},
"items": []any{1, 2, 3},
}
WalkMapLeaves(data, func(path string, v any) error {
fmt.Printf("Leaf - Path: %s, Value: %v\n", path, v)
return nil
})
// Output:
// Leaf - Path: user.name, Value: John
// Leaf - Path: user.age, Value: 30
// Leaf - Path: items[0], Value: 1
// Leaf - Path: items[1], Value: 2
// Leaf - Path: items[2], Value: 3
局限:
- 只遍历叶子节点(非 Map 和非 []any 的值)
- 路径格式: "key.subkey[index]"
- 回调函数返回错误时会中断遍历
- 不保证遍历顺序(Map 的遍历顺序是随机的)
Types ¶
type CallbackFunc ¶
Click to show internal directories.
Click to hide internal directories.