私はこのようなのfloat64にint型に変換することができますタイプはいずれかのインターフェイスが保持している具体的なタイプでなければなりません」、または:アサーションを入力に関して移動型アサーション変換
var a int = 10
var b float64 = float64(a)
、効果的な移動は述べてその値を。に変換できる第2のインタフェース型。 '念頭に置いて
、なぜ次は失敗しない:
func foo(a interface{}) {
fmt.Println(a.(float64))
}
func main() {
var a int = 10
foo(a)
}
これはpanic: interface conversion: interface is int, not float64
が発生します。
「インターフェイスタイプおよびタイプTのX発現のために、一次式
x.(T)
xはゼロではなく、値がに格納されていることと主張:GO仕様が言うこと
注xはT型です。 '
Effective Go文と矛盾しますが、私が見ているものと一線を画しているようです。
のタイプ変換を使用しますが、ランタイムパニックメッセージで示唆されているように、操作は実際にはアサーションではなく「インターフェイス変換」です。このような変換が自然に起こるといいですね。 – Ferguzz
タイプスイッチを行うことができます。あなたはもっと自然なことを思いついていますか? –
@Ferguzz:Goはすべてのコンバージョンで明示的です。暗黙的または自動的なコンバージョンはありません。これはとても良いことです。 「自然な変換」の種類は明示的なものとは完全に逆です。 – Volker