在map[any]any类型映射中向切片追加元素的类型转换问题
Go语言中map[any]any类型映射内切片的追加问题解决
我尝试向map[any]any类型映射中的切片追加元素时遇到了类型转换问题,无法直接将result[index][ABSPath]当作切片进行append操作。
示例代码
package main import ( "fmt" "io/fs" "os" "strings" ) func contains(target []map[any]any, key string) (int, bool) { for index, entry := range target { if _, exists := entry[key]; exists { return index, true } } return -1, false } func getPath(path string, filename string) string { return path[0:strings.Index(path, filename)] } func main() { path := os.Args[1] handle := os.DirFS(path) result := make([]map[any]any, 0) _ = fs.WalkDir(handle, ".", func(path string, d fs.DirEntry, err error) error { ABSPath := getPath(path, d.Name()) if index, exists := contains(result, ABSPath); exists { // 此行报错 result[index][ABSPath] = append(result[index][ABSPath], d.Name()) } else { result = append(result, map[any]any{ABSPath: []string{d.Name()}}) } return nil }) fmt.Println(result) }
运行错误信息
# learning/test/1 ./main.go:43:36: first argument to append must be a slice; have result[index][ABSPath] (map index expression of type any)
我清楚将result定义为[]map[string][]string能直接解决问题,但出于学习目的,希望保留any类型的使用。最终通过类型断言将any类型转换为[]string切片,成功实现了元素追加:
修复后的代码行
result[index][ABSPath] = append(result[index][ABSPath].([]string), d.Name())
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

