github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgType/StructType.go (about)

     1  package kmgType
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  )
     7  
     8  //path -> field name
     9  //TODO embed field
    10  type StructType struct {
    11  	reflectTypeGetterImp
    12  	getElemByStringEditorabler
    13  }
    14  
    15  func (t *StructType) GetElemByString(v reflect.Value, k string) (ev reflect.Value, et KmgType, err error) {
    16  	ev = v.FieldByName(k)
    17  	if !ev.IsValid() {
    18  		err = fmt.Errorf("field %s not find in struct", k)
    19  		return
    20  	}
    21  	et, err = TypeOf(ev.Type())
    22  	return
    23  }
    24  
    25  func (t *StructType) DeleteByPath(v *reflect.Value, path Path) (err error) {
    26  	if len(path) > 1 {
    27  		return passThougthDeleteByPath(t, v, path)
    28  	}
    29  	return fmt.Errorf("[StructType.DeleteByPath] can not delete f struct")
    30  }