Golang : Read data from config file and assign to variables
Usually a large program will need multiple parameters to function properly and the parameters will determine the behavior of the program. A good programmer will make his or her program to accept parameters from command line, environment or read from a file.
In this tutorial, we will learn how to read data from a plain text config file - simulating a program reading parameters from a file.
Here you go!
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
type Config map[string]string
func ReadConfig(filename string) (Config, error) {
// init with some bogus data
config := Config{
"port": "8888",
"password": "abc123",
"ip": "127.0.0.1",
}
if len(filename) == 0 {
return config, nil
}
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
// check if the line has = sign
// and process the line. Ignore the rest.
if equal := strings.Index(line, "="); equal >= 0 {
if key := strings.TrimSpace(line[:equal]); len(key) > 0 {
value := ""
if len(line) > equal {
value = strings.TrimSpace(line[equal+1:])
}
// assign the config map
config[key] = value
}
}
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
}
return config, nil
}
func main() {
// for this tutorial, we will hard code it to config.txt
config, err := ReadConfig(`config.txt`)
if err != nil {
fmt.Println(err)
}
//fmt.Println("Config data dump :", config)
// assign values from config file to variables
ip := config["ip"]
pass := config["password"]
port := config["port"]
fmt.Println("IP :", ip)
fmt.Println("Port :", port)
fmt.Println("Password :", pass)
}
Reading a sample config.txt file :
[profile manager]
key=value
password = sjssh31mmv
; a comment
port = 8080
ip = 123.456.789.321
# another comment
url=example.com
file=
# last comment
Sample output :
IP : 123.456.789.321
Port : 8080
Password : sjssh31mmv
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+35.1k Golang : Convert date or time stamp from string to time.Time type
+4.2k Swift : Convert (cast) Float to Int or Int32 value
+12.9k Golang: Pad right or print ending(suffix) zero or spaces in fmt.Printf example
+9k Golang : Compare files modify date example
+3.9k Golang : Calculate a pip value and distance to target profit example
+10.7k Golang : How to detect a server/machine network interface capabilities?
+28.3k Golang : Login(Authenticate) with Facebook example
+13.2k Golang : How to determine if user agent is a mobile device example
+7.9k Golang : Build and compile multiple source files
+7.7k Android Studio : Indicate progression with ProgressBar example
+7.5k Golang : Add text to image and get OpenCV's X, Y co-ordinates example
+22.3k Golang : minus time with Time.Add() or Time.AddDate() functions to calculate past date