Quick and easy question no doubt, but one that has me stumped.
Sophie.conf
{
"host": {
"domain": "localhost",
"port": 5000
}
}
main.go
...
type Config struct {
domain string `json:"host.domain"`
port int `json:"host.port"`
}
...
func loadConfig() {
buffer, _ := ioutil.ReadFile(DEFAULT_CONFIG_FILE)
fmt.Println(string(buffer))
json.Unmarshal(buffer, &cfg)
}
...
That doesn't work though, if I print with
fmt.Printf("host: %s:%d
", cfg.domain, cfg.port)
The output is:
host: :0
How would I do this properly? Thanks!
In your case you should declare outer Config
struct. Inside it you should define Host
field, in my example it is anonymous struct, but you can extract it as explicit struct.
One note — you structs' fields should be exported (Upper Case name), or json.Unmarshal
(or json.Marshal
) will fail to process data properly, you could experiment with fields on Play Golang.
http://play.golang.org/p/msu73bwXNb
package main
import (
"encoding/json"
"fmt"
)
const jsonDocument = `
{
"host": {
"domain": "localhost",
"port": 5000
}
}
`
type Config struct {
Host struct {
Domain string
Port int
}
}
func main() {
cfg := &Config{}
json.Unmarshal([]byte(jsonDocument), cfg)
fmt.Printf("host: %s:%d
", cfg.Host.Domain, cfg.Host.Port)
}