func (s *Scanner) Scan(dst interface{}, src *html.Node, opts Options) error {
	var v = reflect.ValueOf(dst)
	var t = v.Type()
	if t.Kind() != reflect.Ptr {
		return fmt.Errorf("scan: cannot scan into non ptr %T", dst)
	}
	f, ok := s.lookup(t)
	if !ok {
		scanFunc, err := s.register(t.Elem(), opts)
		if err != nil {
			return err
		}
		f = scanFunc
	}
	return f(v.Elem(), src)
}
Scan scans from src node into dst value.
package scan
import (
	"fmt"
	"reflect"
	"sync"
	"golang.org/x/net/html"
)
type Scanner struct {
	types map[reflect.Type]ScanFunc
	mutex *sync.RWMutex
}
func NewScanner() *Scanner {
	return &Scanner{
		types: make(map[reflect.Type]ScanFunc),
		mutex: &sync.RWMutex{},
	}
}