私が試み:変換スライスに} {インターフェースする配列が、結果は、LENを(使用不可)と他の方法
var a [100]int
func fun1(src interface{}) interface{} {
src, _ = src.([100]int) // changed []int to [100]int
fmt.Println(reflect.TypeOf(src)) // result: []int
dest := make([]int, len(src))
return dest
}
にエラーがある:
message: 'invalid argument src (type interface {}) for len'
しかし、私は再定義する場合変数:
var a [100]int
func fun1(src interface{}) interface{} {
slice_src, _ := src.([100]int) //changed []int to [100]int
fmt.Println(reflect.TypeOf(slice_src)) // result: []int
dest := make([]int, len(slice_src))
return dest
}
大丈夫です。
なぜreflect.TypeOf(src)
はsrc.([]int)
を使用した後に[] intを出力しますが、エラーはsrcがまだインターフェイス{}であることを示していますか? 私はこれをconvert interface{} to intにチェックしましたが、正しい変換の使い方はまだ分かりません。
別の質問があります:
[]
とfalse
を返します前に、私は、型アサーション以来[100]int
に[]int
を変更するには。
しかし、私はa
の種類がわからない場合、どのように私は機能とスライス([]int
)を返すようにinterface{}
として配列(のような[99]int
)を転送するタイプのアサーションを使用できますか?
最初の例のタイプアサーションは、赤いニシンです。セマンティクスを変更せずに削除することができます。変数はその静的型を変更することはできません。 – Peter