我有一张 类型的地图set,实际上是map[string]string. 然而,将它传递给接受 a 的函数会map[string]string失败,因为 Go 不识别set为 1。然而,我无法说服编译器它是其中之一。有没有办法解决这个问题,而不需要循环和复制?package mainimport ( "fmt")type name stringtype field stringtype set map[name]field // map[string]string after alltype plain map[string]string // also map[string]stringfunc main() { var typed = set{"hi": "ho"} // map[string]string? back := plain(typed) // cannot convert typed (type set) to type plain back := typed.(plain) // invalid type assertion: typed.(plain) (non-interface type set on left) echo(back)}func echo(in map[string]string) { fmt.Println(in)}
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
您可以使用不安全的包来做到这一点。
注意:我认为这不一定是一个好主意,可能正确的方法是迭代和复制,但因为它确实回答了所提出的问题......
var typed = set{"hi": "ho"} // map[string]string?
p := unsafe.Pointer(&typed)
var back plain
back = *(*plain)(p)
游乐场: https: //play.golang.org/p/yienSuJSnQU
- 1 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消