code: func (config *Config) Get(key string, defaultValue interface{}) (interface{}, error) {
  	var (
  		tmp interface{}
  	)
  	keys := strings.Split(key, "/")
  	tmp = config.mapping
  	for i, item := range keys {
  		if len(item) == 0 {
  			continue
  		}
  		if mapping, ok := tmp.(map[string]interface{}); ok {
  			if value, exists := mapping[item]; exists {
  				tmp = value
  			} else if defaultValue != nil {
  				return nil, &KeyError{key: path.Join(append(keys[:i], item)...)}
  			} else {
  				return nil, &KeyError{key: path.Join(append(keys[:i], item)...)}
  			}
  		} else {
  			return nil, &ValueTypeError{key: path.Join(append(keys[:i], item)...), value: tmp, message: "Value is not a map"}
  		}
  	}
  	return tmp, nil
  }
docs: // Get is used to retrieve the value by indicating a key.
  // After calling this method you should indicate the type of the return value.
  // If one of the parent node is not a map, then return a ValueTypeError.
  // If the key is not found, return a KeyError.