是否可以在不使用 golang 循环的情况下将 map[string]string 转换为 map[string]interface{}?
Is it possible to cast map[string]string to map[string]interface{} without using for loop in golang?
当我尝试使用以下代码片段在 golang 中将 map[string]string
对象转换为 map[string]interface{}
时,出现错误。
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 {}
我可以使用以下代码使用长 for 循环解决方案对此进行转换,但我想知道是否有任何更简单的方法。
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)
}
go 中没有 cast 之类的东西。只有类型转换。所以最好的方法是使用循环,然后将字符串转换为接口。
您可以通过 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 中将 map[string]string
对象转换为 map[string]interface{}
时,出现错误。
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 {}
我可以使用以下代码使用长 for 循环解决方案对此进行转换,但我想知道是否有任何更简单的方法。
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)
}
go 中没有 cast 之类的东西。只有类型转换。所以最好的方法是使用循环,然后将字符串转换为接口。
您可以通过 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]
}