我有一張 類型的地圖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 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消