我一直在寻找一种方法将地图转换为另一张地图,而无需按键复制。两个映射都具有等效的密钥类型(如下所示)。
下面的代码似乎可以完成这项工作,但我想知道如果我使用它会有什么样的陷阱?
package main
import (
"fmt"
"unsafe"
)
type A string
var (
x A = "x"
y A = "y"
)
func main() {
a := map[A]string{}
a[x] = "242342"
a[y] = "1234"
b := convert(a)
fmt.Println(a[x])
fmt.Println(b["x"])
fmt.Println(a[y])
fmt.Println(b["y"])
}
func convert(in map[A]string) map[string]string {
return *(*map[string]string)(unsafe.Pointer(&in))
}