inspectx

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2025 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Example
for _, v := range []any{
	testdata.AmbiguousL1x2{
		StringerL1: testdata.StringerL1("StringerL1"),
		Stringer:   ptrx.Ptr(testdata.StringerL1("fmt.Stringer")),
	},
	testdata.AmbiguousL1AndField{
		StringerL1: testdata.StringerL1("v.StringerL1"),
		String:     "StringField",
	},
	testdata.AmbiguousL2x2{
		StringerL2:       testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL2"))},
		StringerL2WrapL1: &testdata.StringerL2WrapL1{StringerL1: ptrx.Ptr(testdata.StringerL1("StringerL2WrapL1"))},
	},
	testdata.UnambiguousL1AndL2x2{
		StringerL2:       &testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL2"))},
		StringerL2WrapL1: testdata.StringerL2WrapL1{StringerL1: ptrx.Ptr(testdata.StringerL1("StringerL2WrapL1"))},
		StringerL1:       ptrx.Ptr(testdata.StringerL1("StringerL1")),
	},
	testdata.AmbiguousL1x2AndL2{
		StringerL1: testdata.StringerL1("StringerL1"),
		Stringer:   ptrx.Ptr(testdata.StringerL1("fmt.Stringer")),
		StringerL2: testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL2"))},
	},
	testdata.UnambiguousL2AndL3x2{
		StringerL2:       testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL2"))},
		StringerL3:       testdata.StringerL3{StringerL2: testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL3"))}},
		StringerL3WrapL2: testdata.StringerL3WrapL2{StringerL2WrapL1: testdata.StringerL2WrapL1{StringerL1: ptrx.Ptr(testdata.StringerL1("StringerL3WrapL2"))}},
	},
	testdata.AmbiguousL2AndL3x2AndField{
		StringerL2:       testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL2"))},
		StringerL3:       testdata.StringerL3{StringerL2: testdata.StringerL2{Stringer: ptrx.Ptr(testdata.StringerL1("StringerL3"))}},
		StringerL3WrapL2: testdata.StringerL3WrapL2{StringerL2WrapL1: testdata.StringerL2WrapL1{StringerL1: ptrx.Ptr(testdata.StringerL1("StringerL3WrapL2"))}},
		StringField:      testdata.StringField{String: "any"},
	},
} {
	rt := reflect.TypeOf(v)
	fmt.Println(rt, rt.NumMethod())
	for i := range rt.NumMethod() {
		fmt.Println(rt.Method(i).Name, reflect.ValueOf(v).Method(i).Call(nil)[0].Interface())
	}
	fmt.Println()
}
Output:

testdata.AmbiguousL1x2 0

testdata.AmbiguousL1AndField 0

testdata.AmbiguousL2x2 0

testdata.UnambiguousL1AndL2x2 1
String StringerL1

testdata.AmbiguousL1x2AndL2 0

testdata.UnambiguousL2AndL3x2 1
String StringerL2

testdata.AmbiguousL2AndL3x2AndField 0

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func InspectMethods

func InspectMethods(t types.Type) []*types.Func

Types

type Field

type Field struct {
	// contains filtered or unexported fields
}

func FieldByName

func FieldByName(t types.Type, name string) *Field

func FieldByNameFunc

func FieldByNameFunc(t types.Type, match func(string) bool) *Field

func InspectField

func InspectField(t types.Type, match func(string) bool, w Walker, entries int) *Field

func (*Field) Tag

func (f *Field) Tag() string

func (*Field) Var

func (f *Field) Var() *types.Var

type Fields

type Fields map[string][]*Field

type Method

type Method struct {
	// contains filtered or unexported fields
}

func (*Method) CheckRef

func (m *Method) CheckRef(t types.Type) bool

CheckRef checks if this method can reference by t. when a method's receiver is a pointer type. it needs a pointer type to refer it in the derived list of this method.

type Methods

type Methods map[string][]*Method

type Walker

type Walker []types.Type

func (*Walker) IsVisited

func (w *Walker) IsVisited(t types.Type) bool

func (*Walker) Visit

func (w *Walker) Visit(t types.Type)

func (*Walker) Visited

func (w *Walker) Visited(t types.Type)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL