The project is under heavy development. It is stable enough so we use it in production at Sourcegraph, but expect changes.
-  full support of GraphQL spec (October 2016)
-  propagation of nullon resolver errors
- everything else
 
-  propagation of 
- minimal API
- support for context.Context and OpenTracing
- early error detection at application startup by type-checking if the given resolver matches the schema
- resolvers are purely based on method sets (e.g. it's up to you if you want to resolve a GraphQL interface with a Go interface or a Go struct)
-  nice error messages (no internal panics, even with an invalid schema or resolver; please file a bug if you see an internal panic)
- nice errors on resolver validation
- nice errors on all invalid schemas
- nice errors on all invalid queries
 
- panic handling (a panic in a resolver should not take down the whole app)
- parallel execution of resolvers
A resolver must have one method for each field of the GraphQL type it resolves. The method name has to be exported and match the field's name in a non-case-sensitive way.
The method has up to two arguments:
- Optional context.Contextargument.
- Mandatory *struct { ... }argument if the corresponding GraphQL field has arguments. The names of the struct fields have to be exported and have to match the names of the GraphQL arguments in a non-case-sensitive way.
The method has up to two results:
- The GraphQL field's value as determined by the resolver.
- Optional errorresult.
Example for a simple resolver method:
func (r *helloWorldResolver) Hello() string {
	return "Hello world!"
}The following signature is also allowed:
func (r *helloWorldResolver) Hello(ctx context.Context) (string, error) {
	return "Hello world!", nil
}