最初の例は失敗しますが、2番目の例はうまくいかない理由は何ですか?タイプアサーションとインターフェイス
このようなアサーションを行う正しい方法は何ですか?
例1 https://play.golang.org/p/4LRGQLdGPB
// example 1
type Packet map[string]interface{}
func get(pack interface{}) {
if packet, ok := pack.(Packet); !ok {
fmt.Printf("error: %#v, %#v\n", pack, packet)
}
}
func main() {
pack := make(map[string]interface{})
pack["qwe"] = 123
get(pack)
}
// error: map[string]interface {}{"qwe":123}, main.Packet(nil)
例2 https://play.golang.org/p/Pd9jvvNrq5
// example 2
type Packet map[string]interface{}
func get(pack interface{}) {
var p Packet
if packet, ok := pack.(map[string]interface{}); !ok {
fmt.Printf("%#v, %#v\n", pack, packet)
} else {
p = packet
}
fmt.Printf("%#v\n", p)
}
func main() {
pack := make(map[string]interface{})
pack["qwe"] = 123
get(pack)
}
// main.Packet{"qwe":123}
も取得するには、Get(パック)を交換することによって行うことができます (パケット(パック) ) – Apin
@Apin trueしかしそれは本当に無意味だろう – OneOfOne