bbgo_origin/pkg/bbgo/reflect.go

43 lines
799 B
Go
Raw Permalink Normal View History

package bbgo
import (
"reflect"
)
2022-05-17 10:10:37 +00:00
type InstanceIDProvider interface {
InstanceID() string
}
func callID(obj interface{}) string {
sv := reflect.ValueOf(obj)
st := reflect.TypeOf(obj)
if st.Implements(reflect.TypeOf((*InstanceIDProvider)(nil)).Elem()) {
m := sv.MethodByName("InstanceID")
ret := m.Call(nil)
return ret[0].String()
}
return ""
}
func isSymbolBasedStrategy(rs reflect.Value) (string, bool) {
2022-05-17 10:10:37 +00:00
if rs.Kind() == reflect.Ptr {
rs = rs.Elem()
}
field := rs.FieldByName("Symbol")
if !field.IsValid() {
return "", false
}
if field.Kind() != reflect.String {
return "", false
}
return field.String(), true
}
func hasField(rs reflect.Value, fieldName string) (field reflect.Value, ok bool) {
field = rs.FieldByName(fieldName)
return field, field.IsValid()
}