code: func ParseSchema(schemaString string, resolver interface{}, opts ...SchemaOpt) (*Schema, error) {
  	s := &Schema{
  		schema:           schema.New(),
  		maxParallelism:   10,
  		tracer:           trace.OpenTracingTracer{},
  		validationTracer: trace.NoopValidationTracer{},
  		logger:           &log.DefaultLogger{},
  	}
  	for _, opt := range opts {
  		opt(s)
  	}
  
  	if err := s.schema.Parse(schemaString, s.useStringDescriptions); err != nil {
  		return nil, err
  	}
  
  	if resolver != nil {
  		r, err := resolvable.ApplyResolver(s.schema, resolver)
  		if err != nil {
  			return nil, err
  		}
  		s.res = r
  	}
  
  	return s, nil
  }
docs: // ParseSchema parses a GraphQL schema and attaches the given root resolver. It returns an error if
  // the Go type signature of the resolvers does not match the schema. If nil is passed as the
  // resolver, then the schema can not be executed, but it may be inspected (e.g. with ToJSON).