是否可以在golang中不使用for循环而将map[string]string强制转换为map[string]接口{}?
当我尝试使用下面的代码段将是否可以在golang中不使用for循环而将map[string]string强制转换为map[string]接口{}?,go,go-interface,Go,Go Interface,当我尝试使用下面的代码段将map[string]string对象转换为golang中的map[string]接口{}时,我得到一个错误 package main import "fmt" func main() { var m = make(map[string]string) m["a"] = "b" m1 := map[string]interface{}(m) fmt.Pri
map[string]string
对象转换为golang中的map[string]接口{}
时,我得到一个错误
package main
import "fmt"
func main() {
var m = make(map[string]string)
m["a"] = "b"
m1 := map[string]interface{}(m)
fmt.Println(m1)
}
我得到一个类似这样的错误:
# example
./prog.go:10:30: cannot convert m (type map[string]string) to type map[string]interface {}
我可以使用下面的代码使用long-for-loop解决方案来转换它,但我想知道是否有更简单的方法来实现这一点
package main
import (
"fmt"
)
func main() {
m := map[string]string{
"a": "a",
"b": "b",
}
m2 := make(map[string]interface{}, len(m))
for k, v := range m {
m2[k] = v
}
fmt.Println(m2)
}
在围棋中没有投进去的东西。只有类型转换。因此,最好的方法是使用循环,然后将字符串转换为接口。您可以通过JSON对其进行往返:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func transcode(in, out interface{}) {
buf := new(bytes.Buffer)
json.NewEncoder(buf).Encode(in)
json.NewDecoder(buf).Decode(out)
}
func main() {
m := map[string]string{"a": "b"}
n := make(map[string]interface{})
transcode(m, &n)
fmt.Println(n) // map[a:b]
}
“是否可以在golang中不使用for循环而将map[string]string强制转换为map[string]接口{}?”--否。循环非常简单,也非常惯用。请参阅中的这一条目,它是关于切片的,但同样适用于贴图。感谢@mkopriva的澄清和引用,它很有效,但这是一个糟糕的想法。循环的执行和写入效率将大大提高。json包在封面下使用反射。因此,如果您想制作一个通用的贴图转换器,最好直接使用反射。对于目标转换,静态类型的循环是最好的。