code: func NewService(comp Component, opts []Option) *Service {
  	s := &Service{
  		Type:     reflect.TypeOf(comp),
  		Receiver: reflect.ValueOf(comp),
  	}
  
  	// apply options
  	for i := range opts {
  		opt := opts[i]
  		opt(&s.Options)
  	}
  	if name := s.Options.name; name != "" {
  		s.Name = name
  	} else {
  		s.Name = reflect.Indirect(s.Receiver).Type().Name()
  	}
  
  	return s
  }
docs: // NewService creates a new service