mikejk8s / go-template

☄️ Powerful template for Go CLI projects with advanced config management and all the fancy stuff

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Go CLI Project Template ☄️

Powerful template for Go CLI applications with advanced config management

Screenshot 2022-10-05 at 11 14 32

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, type config 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") use filesystem.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

Screenshot 2022-09-30 at 13 37 30

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 make target.

make rename

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 App at constant/constant.go

Changing config file format from TOML from YAML

Change the value of the constant ConfigFormat at constant/constant.go

Declaring new config fields

Firstly, declare a field key name as a constant inside constant/keys.go

Then put them inside config/default.go (take a predefined fields for logging as a reference)

For example

// constant/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(constant.EmojiType). See viper for more information

Something is not clear?

Please, open an issue so I could document it

About

☄️ Powerful template for Go CLI projects with advanced config management and all the fancy stuff


Languages

Language:Go 90.7%Language:Makefile 9.3%