func NewIterator()

in gotype/fold.go [63:91]


func NewIterator(vs structform.Visitor, opts ...FoldOption) (*Iterator, error) {
	reg := newTypeFoldRegistry()
	O, err := applyFoldOpts(opts)
	if err != nil {
		return nil, err
	}

	var userReg map[reflect.Type]reFoldFn
	if O.foldFns != nil {
		userReg = map[reflect.Type]reFoldFn{}
		for typ, folder := range O.foldFns {
			reg.set(typ, folder)
			userReg[typ] = folder
		}
	}

	it := &Iterator{
		ctx: foldContext{
			visitor: structform.EnsureExtVisitor(vs).(visitor),
			userReg: userReg,
			reg:     reg,
			opts: options{
				tag: "struct",
			},
		},
	}

	return it, nil
}