将多维JSON文件映射到Go结构

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)
}