Software Development

Introduction to Viper in Go and Golang

In Go, there are numerous packages to deal with utility configuration. The viper bundle is hottest amongst them in offering a whole configuration resolution of an utility. It helps quite a few configuration file codecs akin to JSON, YAML, TOML, HCL and Java properties format. This programming tutorial introduces Golang’s viper bundle with Go code examples.

Seeking to be taught Go or Golang in an internet course setting? We now have a listing of the Greatest On-line Programs to Be taught Go and Golang that can assist you get began.

What’s the viper Library in Go and Golang?

As talked about, viper is a bundle that gives a whole configuration resolution in a Go challenge. Managing and sustaining configuration for an enormous and complex utility – akin to constructing a server utility or every other utility which relies upon rather a lot on person manipulation of configurations – just isn’t a straightforward job. Furthermore, fashionable functions are constructed to deploy in various kinds of environments, akin to in Docker, cloud infrastructures, and so forth. Consequently, to be able to preserve consistency throughout deployment, functions must be constructed to be open from little to excessive configurability. An exterior assist that helps on this respect just isn’t solely a respite, but additionally very a lot welcome for the builders concerned in constructing such an answer.

The viper library, on this respect, can fully change the flag bundle, which supplies provisions for growing UNIX methods, akin to command line utilities. Based on the viper documentation, viper, aside from being a whole configuration resolution for Go functions, additionally helps 12-Issue apps. 12-Issue app is a strategy for constructing software-as-a-service (SAAS) functions. Launched by Heroku, this system leverages portability, declarative codecs, and automation that makes functions extra resilient to the adaptive wants of the altering setting of software program deployment.

Learn: Learn how to Use the flag Bundle in Go

What Does the viper Library Help in Go?

Based on the viper documentation, it helps the next in Go functions:

  • Studying JSON, TOML, YAML, HCL, envfile and Java properties config recordsdata. Most configuration info of an utility is written on this format. Viper helps most of them.
  • Establishing default configurations
  • Studying setting variables
  • Studying distant configuration methods
  • Studying from command line flags
  • Studying from buffer
  • Setting specific values

Learn how to Set up viper in Go

The steps to put in viper are just like putting in every other bundle in Go. As soon as a Go utility challenge has been arrange correctly with the required module file utilizing the go mod init command, a go.mod file might be created. This file maintains the checklist of packages used within the present challenge. Simply kind: go get to put in the viper bundle. Observe {that a} new checklist of packages associated to the viper bundle might be added within the go.mod file.

Go viper Code Instance

Suppose we wish to get the values of the frequent Working System setting variable known as PATH. Builders could achieve this utilizing the next Go code instance:

bundle essential

import (

func essential() {
val := viper.Get("PATH")
fmt.Println("PATH:", val)

Observe that, within the operate essential(), we used viper.BindEnv to bind a viper key to the setting variable known as PATH. It’s case delicate, that means, as the secret is supplied, it is going to use the setting key that matches the important thing in uppercase if given in uppercase. Since, BindEnv can take a couple of argument, every will characterize setting variable names that bind to this key and might be taken within the specified order.

The viper.Get operate is used to retrieve any worth given the important thing to make use of. Right here, we use it to retrieve the worth within the Working System’s PATH setting variable. Observe within the following Golang code instance that we cannot solely retrieve values from the setting variable, but additionally set them as required:

eval := viper.Get("GOMAXPROCS")
fmt.Println("GOMAXPROCS:", eval) 

viper.Set("GOMAXPROCS", 20)
eval = viper.Get("GOMAXPROCS")
fmt.Println("GOMAXPROCS:", eval)

We are able to additionally set new setting variables via Go code, topic to the Working System’s permission, after all:

cval := viper.Get("MYVARIABLE")
if cval == nil {
	fmt.Println("MYVARIABLE couldn't be outlined.")

Observe that the flag bundle doesn’t provide such flexibility, however the os bundle in the usual library provides some. Nevertheless, the viper bundle makes it a lot simpler to make use of.

Learn: The Greatest Instruments for Distant Builders

Learn how to Learn JSON Configuration Information in Go together with viper

Generally, configuration recordsdata are written in a separate configuration file in one of many many various out there codecs, akin to JSON. The viper bundle is totally geared up to learn and extract info saved there. Right here is a few fast instance code of the right way to learn a JSON configuration file in Go.

Let the JSON config file: testJSONConfig.json be as follows:

"init-param": {
"installAt": "Philadelphia, PA",
"adminEmail": "[email protected]",
"staticPath": "/content material/static"
"taglib": {

The Go code snippet to learn the JSON file is as follows:

fmt.Printf("Utilizing config: %sn", viper.ConfigFileUsed())

if viper.IsSet("init-param.installAt") {
fmt.Println("init-param.installAt:", viper.Get("init-param.installAt"))
} else {
fmt.Println(" init-param.installAt not set.")
if viper.IsSet("init-param.staticPath") {
fmt.Println("init-param.staticPath:", viper.Get("init-param.staticPath"))
} else {
fmt.Println(" init-param.staticPath just isn't set.")

Working with different well-liked file codecs, akin to YAML, TOML, HCL, and so forth, utilizing viper is kind of related.

Unmarshalling By viper in Go

Curiously, viper additionally supplies the function of unmarshalling of values from configuration recordsdata to Go sorts akin to struct, map, and so forth. Here’s a fast instance of the right way to unmarshal with viper in Go:

kind configType struct {
InstallAt string
Model string
StaticPath string

var config configType

err := viper.Unmarshal(&config)
if err != nil {
fmt.Println("Unmarshalling failed!")

Observe that the marshalling options are sometimes supplied by the bundle of the file format we wish to marshall. For instance, if we wish to marshall a Go kind right into a YAML file, then the YAML Go bundle will present the marshalling function.

Last Ideas on the Go Library viper

This has been a fast overview of the viper bundle, with a glimpse of its use in Go. Extra detailed info may be obtained from the viper documentation itself. Perceive that viper, in spite of everything, is a instrument for use in line with the requirement of the software program being developed. It helps many glorious options associated to storing and retrieving configuration info sought by programmers in fashionable utility growth.

Each functionality of viper will not be required for the time being, however that ought to not cease one from utilizing a few of its options. Utilizing judiciously is the important thing. For instance, it’s higher to make use of configuration recordsdata as an alternative of utilizing command line utilities to produce too many configuration parameters and flags. On this scenario, the options supplied by the viper bundle may be fairly useful.

Learn extra Go programming tutorials and Golang growth ideas.

What's your reaction?

Leave A Reply

Your email address will not be published.