2016-12-01 81 views
0

我嘗試在我的porogram查找方式來解決beetwen類型指針數組形式指針單個對象使用interface{}作爲特定函數的參數。在這個時候,我用下面的方式得到這個reslut:如何reslove指針指向數組從指針到單個對象

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

以上的方式工作,但對我來說,這是不乾淨的代碼。我認爲存在一些更好的方法來解決這個使用golang包作爲類型,但現在我不知道如何,所以請你的建議。

Ps。我不想使用例如switch statemet:

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

這應該是更普遍的不依賴數組類型的對象上

回答

2

使用reflect.Kind檢查樣的價值,你有:

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