Copper
  • Intro to Copper
  • Getting Started
    • Installation
    • Create Project
      • Go Templates
      • Tailwind
      • React
      • React + Tailwind
      • REST API
  • Guides
    • HackerNews Clone
    • Deploy with Fly.io
  • The Basics
    • Directory Structure
    • Dependency Injection
  • Core
    • App Lifecycle
    • Configuration
    • Error Handling
    • Logging
  • HTTP
    • Routing
    • Read & Write JSON
    • HTML Views
    • Middleware
  • SQL
    • Queries
    • Migrations
Powered by GitBook
On this page

Was this helpful?

  1. Core

Configuration

Copper provides the cconfig package that helps read hierarchical TOML files into simple Go structs. The TOML config files live in the ./config directory with a few out-of-the-box files such as base.toml, dev.toml, and prod.toml.

You are encouraged to extend and customize the structure of the ./config directory as needed for your project.

Extensible TOML Files

The configurations are defined in simple TOML files that support a special extends key:

config/dev.toml
extends = ["base.toml"]

[starship]
destination = "HD1"
use_wormholes = false

In the example above, the dev.toml file defines a top-level extends key which is set to base.toml. As a result, any project that is run with the dev.toml config file will inherit all configuration values from base.toml.

Do not use top-level configuration values. Remember to group all values under a section so they can be loaded per package without needing a "global" app config.

Read Configuration

You can read a config section using cconfig.Loader#Load. The values are loaded into a destination Go struct. The config loader accounts for the hierarchy of all TOML files that use extends.

pkg/starship/config.go
package starship

import (..)

func LoadConfig(configs cconfig.Loader) (Config, error) {
	var config Config

	err := configs.Load("starship", &config)
	if err != nil {
		return Config{}, cerrors.New(err, "failed to load starship config", nil)
	}

	return config, nil
}

type Config struct {
	Destination  string `toml:"destination"`
	UseWormholes bool   `toml:"use_wormholes"`
}
PreviousApp LifecycleNextError Handling

Last updated 2 years ago

Was this helpful?