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
+15.7k Golang : Get current time from the Internet time server(ntp) example
+9.6k Golang : interface - when and where to use examples
+5.1k Golang : Convert lines of string into list for delete and insert operation
+13.9k Golang : Google Drive API upload and rename example
+8k Golang : Multiplexer with net/http and map
+12.3k Golang : Search and extract certain XML data example
+20.4k Android Studio : AlertDialog and EditText to get user string input example
+8.7k Golang : Gorilla web tool kit schema example
+25.2k Golang : Convert long hexadecimal with strconv.ParseUint example
+6k Golang : Debug with Godebug
+20.6k Golang : Saving private and public key to files
+79.2k Golang : How to return HTTP status code?