猿问

在 Golang 中将命名类型映射[字符串]字符串转换为普通类型

我有一张 类型的地图set,实际上是map[string]string. 然而,将它传递给接受 a 的函数会map[string]string失败,因为 Go 不识别set为 1。

然而,我无法说服编译器它是其中之一。有没有办法解决这个问题,而不需要循环和复制?

package main


import (

    "fmt"

)


type name string

type field string


type set map[name]field      // map[string]string after all

type plain map[string]string // also map[string]string


func 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)

}


慕丝7291255
浏览 152回答 1
1回答

慕码人2483693

您可以使用不安全的包来做到这一点。注意:我认为这不一定是一个好主意,可能正确的方法是迭代和复制,但因为它确实回答了所提出的问题......var typed = set{"hi": "ho"} // map[string]string?p := unsafe.Pointer(&typed)var back plainback = *(*plain)(p)游乐场: https: //play.golang.org/p/yienSuJSnQU
随时随地看视频慕课网APP

相关分类

Go
我要回答