2016-12-01 9 views
0

私は私のポログラムで、beetwen型のポインタを配列型のポインタに解決する方法を見つけようとします。特定の関数の引数としてinterface{}を使用します。ポインタから単一オブジェクトへのポインタへのポインタの再クローズ方法

func object(v interface{}) { 
    if strings.HasPrefix(reflect.TypeOf(v).String(), "*[]") { 
     // pointer to array 
    } else { 
     // pointer to single object 
    } 
} 

以上のように動作しますが、私にとってはこれがないクリーンなコードです:現時点では私は道の下に使用して、このreslutを取得します。タイプとしてgolangパッケージを使用してこれを解決するより良い方法があると思いますが、今私はあなたの提案をどうしたらいいのでしょうか。

ps。私は、例えばswitch statemetを使用したくない:

switch v.(type){ 
case *[]someType: 
    // array 
default: 
    // single object 
} 

これは、より普遍的でなければなりませんあなたが持っている値の種類をチェックするreflect.Kindを使用して、配列

答えて

2

の種類のオブジェクトに依存しない:

func object(i interface{}) { 
    v := reflect.ValueOf(i) 
    switch v.Kind() { 
    case reflect.Ptr: 
     fmt.Print("we have a pointer ") 
     switch v.Elem().Kind() { 
     case reflect.Slice: 
      fmt.Println("to a slice") 
     case reflect.Array: 
      fmt.Println("to an array") 
     case reflect.Struct: 
      fmt.Println("to a struct") 
     default: 
      fmt.Println("to unexpected type ", v.Elem().Kind()) 
     } 
    } 
} 

https://play.golang.org/p/q32Cfz_dmF

関連する問題