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
+8.9k Android Studio : Image button and button example
+22.4k Golang : Convert seconds to minutes and remainder seconds
+17k Golang : Get the IPv4 and IPv6 addresses for a specific network interface
+9.9k Random number generation with crypto/rand in Go
+10.6k Golang : Select region of interest with mouse click and crop from image
+7.3k Ubuntu : connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream
+13.4k Golang : Date and Time formatting
+15.7k Golang : Convert date format and separator yyyy-mm-dd to dd-mm-yyyy
+7.6k Golang : How to stop user from directly running an executable file?
+7.8k Golang : How to execute code at certain day, hour and minute?
+12.7k Golang : Get absolute path to binary for os.Exec function with exec.LookPath
+9.1k Golang : automatically figure out array length(size) with three dots