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
+2.6k Unix/Linux/MacOSx : Get local IP address
+3.9k Golang : Turn string or text file into slice example
+4k Golang : Convert word to its plural form example
+2.7k Golang : Characters limiter example
+9.3k Golang : Convert date format and separator yyyy-mm-dd to dd-mm-yyyy
+2.7k Unix/Linux : Get reboot history or check when was the last reboot date
+1.7k Golang : How to handle file size larger than available memory panic issue
+2.3k Unix/Linux/MacOSx : How to remove an environment variable ?
+15.8k Golang : bufio.NewReader.ReadLine to read file line by line
+3.6k Golang : Rename part of filename
+4.6k Golang : Convert octal value to string to deal with leading zero problem