You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:12:38