Configuration Module Documentation
This Go module provides a singleton configuration object C()
that encapsulates various configurations essential for your application. The configurations are filled during the package initialization (init()
) by loading from config.yml
, Default()
, and environment variables.
Usage
Installation
To use this, import the package in your code:
import "your_module_path/config"
Configuration Options
The package allows setting up configurations in three ways:
- Environment Variables
- Default Settings via
Default()
- Initialization from
config.yml
1. Using Environment Variables
💡 Use this way for storing important secrets
that should not be hard coded in repo or in config.yml
file. For example, DB_PASSWORD
, or JWT_SECRET
.
Environment variables are used to configure the application at runtime. The variable names must start with ORMUS_
, and nested variables should use __
as a separator (ORMUS_DB__HOST
).
Example setting environment variables:
os.Setenv("ORMUS_DEBUG", "true")
os.Setenv("ORMUS_MULTI_WORD_VAR", "this is a multi-word var")
// ... set other environment variables ...
2. Initialization from config.yml
💡 Store variables which are dependant to the environment
that code is running or the area, the variables that change more frequent
.
The package supports loading configurations from a YAML file named config.yml
. Ensure the YAML file is in the correct format.
Example config.yml
file:
debug: true
multi_word_var: "this is a multi-word var in YAML"
db:
username: ormus
password: youcannotbreakme
# ... other configurations ...
3. Default Settings via Default()
💡 Store variables which they have the least probability of change
.
The Default()
function in the package allows defining default configurations that act as fallbacks. This function should return a Config
struct.
Example of defining default configurations:
// Define default configurations
func Default() config.Config {
return config.Config{
// Define your default configurations here
Debug: true,
MultiWordVar: "default value",
Manager: manager.Config{
JWTConfig: auth.JwtConfig{
SecretKey: "the_most_secure_secret_of_all_time",
},
},
// ... other default configurations ...
}
}
Accessing Configuration
Accessing the Configuration Singleton
To access the configuration object:
// Get the configuration object
cfg := config.C()
Adding New Configurations
For adding new configurations, update the Config
struct in the package and ensure it is filled during the initialization process in the init()
function. Following this, access the updated configuration using the C()
function.
Example
Here's an example demonstrating how to access the configuration object and add new configurations:
package main
import (
"fmt"
"your_module_path/config"
)
func main() {
// Access the configuration object
loadedConfig := config.C()
// Access existing configurations
fmt.Println("Debug mode:", loadedConfig.Debug)
fmt.Println("Multi-word var:", loadedConfig.MultiWordVar)
// ... access other configurations ...
// Add new configurations (modify the Config struct in the package)
loadedConfig.NewConfig = "new value"
// Access the newly added configuration
fmt.Println("New Config:", loadedConfig.NewConfig)
}
Important Notes
- The
Config
object, accessed via C()
, encapsulates all configurations set during the package initialization.
- To add or modify configurations, update the
Config
struct and ensure it is filled during the initialization process (init()
).
- The
C()
function returns a singleton instance of the configuration object filled by the init()
function, consolidating settings from config.yml
, Default()
, and environment variables.
Conclusion
This configuration module provides a convenient singleton object encapsulating configurations filled from config.yml
, Default()
, and environment variables during initialization. Use C()
to access the configurations and extend the Config
struct to incorporate additional settings as needed.