我想在 Golang 中为 hashmap 的值设置多种类型。我实现了 golang 泛型any,并编写了返回的函数map[string]any。


但是,在我运行代码后,它返回了


$ cannot use r.Method (variable of type string) as type T in map literal

在 Go 中为 hashmap 值设置多种类型的正确方法是什么?


这是我的代码


package main


type RequestProperty struct {

    Method string

    Params []any

    Id     int

}


func SetRequestProperty[T any](payloadCombine bool) map[string]T {

    var p map[string]T

    var r = RequestProperty{

        Method: "SET_PROPERTY",

        Params: []any{"combined", payloadCombine},

        Id:     5,

    }

    // just for test

    p = map[string]T{

        "method": r.Method,  // << Error Here

    }


    return p

}


func main() {

    p := SetRequestProperty(true)

}

[编辑] 这似乎有效......我不知道为什么。


package main


type RequestProperty struct {

    Method string

    Params []any

    Id     int

}


// delete [T any], map[string]T 

// change it to map[string]any

func SetRequestProperty(payloadCombine bool) map[string]any {

    var p map[string]any

    var r = RequestProperty{

        Method: "SET_PROPERTY",

        Params: []any{"combined", payloadCombine},

        Id:     5,

    }

    // just for test

    p = map[string]any{

        "method": r.Method,

    }


    return p

}


func main() {

    p := SetRequestProperty(true)

}

不应该T只是像别名一样输入任何内容吗?我误会了什么吗?