Skip to content

Configuration

Constago accepts YAML configuration through constago.yaml or the file passed to --config.

verbose: 1
input:
dir: "."
include: ["**/*.go"]
exclude: ["**/*_test.go"]
struct:
explicit: false
include_unexported: false
only: ""
except: ""
field:
explicit: false
include_unexported: false
only: ""
except: ""
output:
file_name: "constago.gen.go"
initialisms: ["DB"]
defaultInitialisms: true
elements:
- name: "json"
input:
mode: "tagThenField"
tag_priority: ["json"]
output:
mode: "constant"
format:
holder: "pascal"
struct: "pascal"
prefix: "json"
suffix: ""
initialisms: ["S3"]
defaultInitialisms: true
transform:
tag_values: false
value_case: "asIs"
value_separator: ""
initialisms: ["S3"]
defaultInitialisms: true
getters:
- name: "metadata"
returns: ["json", ":value"]
output:
prefix: "metadata"
suffix: ""
format: "pascal"
initialisms: ["S3"]
defaultInitialisms: true
Key Default
verbose 1
input.dir .
input.include ["**/*.go"]
input.exclude ["**/*_test.go"]
input.struct.explicit false
input.struct.include_unexported false
input.struct.only empty
input.struct.except empty
input.field.explicit false
input.field.include_unexported false
input.field.only empty
input.field.except empty
output.file_name constago.gen.go
output.initialisms empty
output.defaultInitialisms true

output.file_name must be a filename ending in .go; directory separators are rejected. Constago writes that filename into each selected package directory. Add the filename to input.exclude; it is not excluded automatically.

output.initialisms and output.defaultInitialisms establish the defaults for every element format, every element transform, and every getter output. Each of those entries can override either setting independently:

output:
initialisms: ["DB"]
defaultInitialisms: false
elements:
- name: "json"
output:
format:
# Replaces the inherited ["DB"] list for this format.
initialisms: ["S3"]
transform:
# Keeps the inherited ["DB"] list but restores built-in initialisms.
defaultInitialisms: true

When defaultInitialisms is true, the configured initialisms are added to Constago’s built-in Go initialisms. When it is false, only the configured list is recognized. Omitting a local property inherits its root output value; an explicit initialisms: [] replaces the inherited list with an empty one. Initialism rules affect only camel and pascal formats or transforms.

Defaults are applied independently to every entry in elements.

Key Default
input.mode tagThenField
input.tag_priority ["field", "json", "xml", "yaml", "toml", "sql"]
output.mode constant
output.format.holder pascal
output.format.struct pascal
output.format.prefix the element’s name
output.format.suffix empty
output.format.initialisms inherits output.initialisms
output.format.defaultInitialisms inherits output.defaultInitialisms
output.transform.tag_values false
output.transform.value_case asIs
output.transform.value_separator empty
output.transform.initialisms inherits output.initialisms
output.transform.defaultInitialisms inherits output.defaultInitialisms

Entries in tag_priority are literal struct tag names. The default field entry therefore reads a tag named field. Use input.mode: field to always derive values from Go field names, or tagThenField to fall back to them.

Key Default
output.prefix the getter’s name
output.suffix empty
output.format pascal
output.initialisms inherits root output.initialisms
output.defaultInitialisms inherits root output.defaultInitialisms

Every getter needs at least one returns entry. Each entry must name a configured element or use the special :value token.

  • Input mode: tag, field, tagThenField
  • Output mode: none, constant, struct
  • Identifier format: camel, pascal, snake, snakeUpper
  • Value case: asIs, camel, pascal, upper, lower
  • Verbosity: 0, 1, 2

Element names, tag names, prefixes, suffixes, and configured initialisms must be valid Go identifiers. Include and exclude file patterns must end in .go, unless they use the package:NAME form.

Explicit command-line flags override values loaded from YAML. Unchanged flag defaults do not overwrite YAML, which means --verbose 0 and boolean false overrides work as expected.