go-template
go-template copied to clipboard
☄️ Powerful template for Go CLI projects with advanced config management
Go CLI Project Template ☄️
Powerful template for Go CLI applications with advanced config management

Features
-
Advanced config management with viper and useful config commands such as setting config values directly from CLI (like this
config set -k logs.write -v true
), reading env variables and file-based configuration (either TOML or YAML). Also, configuration is self-documented, typeconfig info
to show every config field available with description for each. -
Cache & Temp files management with
clear
command -
Polished CLI experience with cobra + coloredcobra to make things look pretty
-
Afero filesystem for various fs utils, abstractions and in-memory fs for testing. For example, instead of
os.Remove("file")
usefilesystem.Api().Remove("file")
-
Easy to use path management with
where
package -
Logging to file
-
Icons!
-
Predefined lipgloss colors
How to use
Press this shiny green button on top

Then you would probably want to rename go mod name from github.com/metafates/go-template
to something else.
To do this you could use your IDE refactor features or run just target.
just rename github.com/username/repo
This will prompt you to type a new name and will replace every occurence of the old go mod name with the new one.
Further usage
Changing name of the app
Change the value of the constant Name
at app/meta.go
Changing config file format from TOML from YAML
Change the value of the constant ConfigFormat
at config/init.go
Declaring new config fields
Firstly, declare a field key name as a constant inside key/keys.go
Then put them inside config/default.go (take a predefined fields for logging as a reference)
For example
// key/keys.go
const IconType = "icon.type"
// config/default.go
{
constant.IconType, // config field key
"emoji", // default value
"What type of icons to use", // description
}
Accessing config fields
For the example above it would be viper.GetString(key.EmojiType)
. See viper for more information
Something is not clear?
Please, open an issue so I could document it