golang-migrate/migrate · error
no config
Error message
no config
What it means
ErrNilConfig (message "no config") is returned by the Snowflake driver's WithInstance/WithConnection (declared at snowflake.go:27) when the *snowflake.Config argument is nil. The driver reads fields such as MigrationsTable, DatabaseName and Schema from the config pointer, so a nil config is rejected immediately. This is a caller-side programming error, not a connection failure.
Source
Thrown at database/snowflake/snowflake.go:27
nurl "net/url"
"strconv"
"strings"
"sync/atomic"
"github.com/golang-migrate/migrate/v4/database"
"github.com/lib/pq"
sf "github.com/snowflakedb/gosnowflake"
)
func init() {
db := Snowflake{}
database.Register("snowflake", &db)
}
var DefaultMigrationsTable = "schema_migrations"
var (
ErrNilConfig = fmt.Errorf("no config")
ErrNoDatabaseName = fmt.Errorf("no database name")
ErrNoPassword = fmt.Errorf("no password")
ErrNoSchema = fmt.Errorf("no schema")
ErrNoSchemaOrDatabase = fmt.Errorf("no schema/database name")
)
type Config struct {
MigrationsTable string
DatabaseName string
}
type Snowflake struct {
isLocked atomic.Bool
conn *sql.Conn
db *sql.DB
// Open and WithInstance need to guarantee that config is never nil
config *ConfigView on GitHub (pinned to 01a9643f14)
Solutions
- Pass a non-nil &snowflake.Config{} (empty is valid; fields like DatabaseName/Schema are populated via Open)
- Audit any helper that builds the config so it cannot return nil on the happy path
- Remember each driver declares its own ErrNilConfig; match errors.Is against database/snowflake.ErrNilConfig
Example fix
// before
var cfg *snowflake.Config
drv, err := snowflake.WithInstance(db, cfg)
// after
cfg := &snowflake.Config{MigrationsTable: "schema_migrations", DatabaseName: db, SchemaName: schema}
drv, err := snowflake.WithInstance(db, cfg) Defensive patterns
Strategy: validation
Validate before calling
if cfg == nil {
return nil, fmt.Errorf("snowflake: config must be provided")
}
drv, err := snowflake.WithInstance(db, cfg) Type guard
func hasSnowflakeConfig(cfg *snowflake.Config) bool { return cfg != nil } Prevention
- Initialize Config inline at the call site (&snowflake.Config{...})
- Make config-building helpers return (cfg, error) so nil cannot slip through silently
- Guard against typed nils when passing through interfaces (reflect.ValueOf(cfg).IsNil())
When it happens
Trigger: Calling snowflake.WithInstance(db, nil) or snowflake.WithConnection(conn, nil) instead of &snowflake.Config{...}.
Common situations: Conditionally-built config structs left nil when Snowflake env vars are missing; typed-nil values flowing through generic driver-construction helpers; copy-pasted driver setup code that skipped Config initialization.
Related errors
AI-assisted analysis of golang-migrate/migrate@01a9643f14 (2026-09-02).
Data as JSON: /api/errors/1eb035bdc5c6d795.
Report an issue: GitHub.