func (cdc *Codec) RegisterConcrete(o interface{}, name string, copts *ConcreteOptions) {
	cdc.assertNotSealed()

	var pointerPreferred bool

	// Get reflect.Type.
	rt := reflect.TypeOf(o)
	if rt.Kind() == reflect.Interface {
		panic(fmt.Sprintf("expected a non-interface: %v", rt))
	}
	if rt.Kind() == reflect.Ptr {
		rt = rt.Elem()
		if rt.Kind() == reflect.Ptr {
			// We can encode/decode pointer-pointers, but not register them.
			panic(fmt.Sprintf("registering pointer-pointers not yet supported: *%v", rt))
		}
		if rt.Kind() == reflect.Interface {
			// MARKER: No interface-pointers
			panic(fmt.Sprintf("registering interface-pointers not yet supported: *%v", rt))
		}
		pointerPreferred = true
	}

	// Construct ConcreteInfo.
	var info = cdc.newTypeInfoFromRegisteredConcreteType(rt, pointerPreferred, name, copts)

	// Finally, check conflicts and register.
	func() {
		cdc.mtx.Lock()
		defer cdc.mtx.Unlock()

		cdc.addCheckConflictsWithConcrete_nolock(info)
		cdc.setTypeInfo_nolock(info)
	}()
}
func (cdc *Codec) RegisterConcrete(o interface{}, name string, copts *ConcreteOptions) {
	cdc.assertNotSealed()

	var pointerPreferred bool

	
	rt := reflect.TypeOf(o)
	if rt.Kind() == reflect.Interface {
		panic(fmt.Sprintf("expected a non-interface: %v", rt))
	}
	if rt.Kind() == reflect.Ptr {
		rt = rt.Elem()
		if rt.Kind() == reflect.Ptr {
			
			panic(fmt.Sprintf("registering pointer-pointers not yet supported: *%v", rt))
		}
		if rt.Kind() == reflect.Interface {
			
			panic(fmt.Sprintf("registering interface-pointers not yet supported: *%v", rt))
		}
		pointerPreferred = true
	}

	
	var info = cdc.newTypeInfoFromRegisteredConcreteType(rt, pointerPreferred, name, copts)

	
	func() {
		cdc.mtx.Lock()
		defer cdc.mtx.Unlock()

		cdc.addCheckConflictsWithConcrete_nolock(info)
		cdc.setTypeInfo_nolock(info)
	}()
}
func ( cdc * Codec ) RegisterConcrete ( o interface { } , name string , copts * ConcreteOptions ) { cdc . assertNotSealed ( ) var pointerPreferred bool // Get reflect.Type. rt := reflect . TypeOf ( o ) if rt . Kind ( ) == reflect . Interface { panic ( fmt . Sprintf ( " " , rt ) ) } if rt . Kind ( ) == reflect . Ptr { rt = rt . Elem ( ) if rt . Kind ( ) == reflect . Ptr { // We can encode/decode pointer-pointers, but not register them. panic ( fmt . Sprintf ( " " , rt ) ) } if rt . Kind ( ) == reflect . Interface { // MARKER: No interface-pointers panic ( fmt . Sprintf ( " " , rt ) ) } pointerPreferred = true } // Construct ConcreteInfo. var info = cdc . newTypeInfoFromRegisteredConcreteType ( rt , pointerPreferred , name , copts ) // Finally, check conflicts and register. func ( ) { cdc . mtx . Lock ( ) defer cdc . mtx . Unlock ( ) cdc . addCheckConflictsWithConcrete_nolock ( info ) cdc . setTypeInfo_nolock ( info ) } ( ) }
// This function should be used to register concrete types that will appear in
// interface fields/elements to be encoded/decoded by go-amino.
// Usage:
// `amino.RegisterConcrete(MyStruct1{}, "com.tendermint/MyStruct1", nil)`
This function should be used to register concrete types that will appear in interface fields / elements to be encoded / decoded by go - amino . Usage : amino . RegisterConcrete ( MyStruct1 {} com . tendermint / MyStruct1 nil )