Interfaces
The Go SDK supports interfaces, which allow you to define Go-style interface definitions so that your module can accept arbitrary values from other modules without being tightly coupled to the concrete type underneath.
To use an interface, define a Go interface that embeds DaggerObject
and use
it in a function argument:
package main
import (
"context"
)
type MyModule struct{}
type Fooer interface {
DaggerObject
Foo(ctx context.Context, bar int) (string, error)
}
func (m *MyModule) Foo(ctx context.Context, fooer Fooer) (string, error) {
return fooer.Foo(ctx, 42)
}
Functions defined in interface definitions must match the client-side API
signature style. If they return a scalar value or an array, they must accept a
context.Context
argument and return an error
return value. If they return a
chainable object value, they must not return an error
value, and they do not need
to include a context.Context
argument.
Note that you must also provide argument names, since they directly translate to the GraphQL field argument names.