2017-07-06 18 views
1

インタフェースのスライスに値にアクセス外出-吐き出すこのように見える:golang:私が来るのデータ構造を持っている

([]interface {}) (len=1 cap=1) { 
(string) (len=1938) "value" 
} 

それは私がこのvalueを印刷することができますどのタイプ[]interface {}

でありますfmt、または私がそれを使用できるように何らかの方法でアクセスしてください。

+0

コンテキストとは何ですか?どのようにそれを使いたいですか?あなたが 'fmt'でそれを印刷したいなら、[あなたはそれを行うことができます](https://play.golang.org/p/S0n2C0SJDY)。 – Adrian

+0

問題は、スライス(または少なくとも[]で囲まれたもの)を返すようです。私は範囲を超えようとしましたが、 '値の範囲(タイプinterface {}) 'の範囲を超えることはできません。 – jaxxstorm

+0

そしてはい、私は' fmt'で印刷できるように割り当てたいだけです。 – jaxxstorm

答えて

1

タイプアサーションまたは反射型の作業を、基底型に汎用interface{}で使用できます。どのようにこれを行うかは、特定のユースケースによって異なります。あなたはinterface{}はあなたの例のように[]interface{}なることを期待することができた場合は、次のことができます。

if sl, ok := thing.([]interface{}); ok { 
    for _, val := range sl { 
     fmt.Println(val) 
     // Or if needed, coerce val to its underlying type, e.g. strVal := val.(string) 
    } 
} 

Playground link

を使用すると、基になる型についての仮定を行うことができない場合、あなたは何をする必要がありますいくつかの黒い魔法はreflectを使っています。

+0

それは、ありがとう! – jaxxstorm

関連する問題