I have a low latency app in Node.js from which I am coding a new baseline in Go.
The app in node uses config and some key/value pairs.
In config/index.js
var config = {};
config.app = {
port:9000
};
config.log= {
level:"error"
}
module.exports=config;
And another file config/key_values.js which contains key/value pair and is refreshed every few minutes.
module.exports.key_values= {
"key1":"value1",
"key2":"value2",
}
And to read this I just use the below code.
let config = require('./config/index');
let keys_vals = require('./config/key_values.js');
console.log('port', config.app.port); //port 9000
console.log('key1 data -->', keys_vals.key_values['key1']); //key1 data --> value1
How can I achieve the same thing in go. I have checked Gonfig for config implementation as well as building structs.
What should be better/best way to achieve the same functionalities as I do in Node?
OK. So here is what I have done for now. config/index.js is now config/config.json with content
{
"app":{"port":9000},
"log":{"level":"error"}
}
and config/key_values.js is config/key_values.json
{
"key1":"value1",
"key2":"value2"
}
And to read this value I am just reading file as []byte
and passing the this to function GetBytes
of library gjson
So the final code look like this:
configFile, err := os.Open("config/config.json")
byteValue, _ := ioutil.ReadAll(configFile)
result := gjson.GetBytes(byteValue, "app.port")
fmt.Println(result) //prints 9000
And same for key values file.
configFile, err := os.Open("config/key_values.json")
byteValue, _ := ioutil.ReadAll(configFile)
result := gjson.GetBytes(byteValue, "key1")
fmt.Println(result) //prints value1
Also tried using struct before to parse config as described here. But this gjson library seems to be what I was searching.