code: func (config *Config) Set(key string, value 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 i == len(keys)-1 {
  				mapping[item] = value
  				return nil
  			}
  			if value, exists := mapping[item]; exists {
  				switch t := value.(type) {
  				case map[string]interface{}:
  					tmp = value
  				default:
  					_ = t
  					mapping[item] = make(map[string]interface{})
  					tmp = mapping[item]
  				}
  			} else {
  				mapping[item] = make(map[string]interface{})
  				tmp = mapping[item]
  			}
  		} else {
  			return &KeyError{key: path.Join(append(keys[:i], item)...)}
  		}
  	}
  	return nil
  }
docs: // Set is used to set the value by indicating the key.
  // If you want to set multi-level json, key can be like 'foo/bar'.
  // For instance, `Set("foo/bar", 4)` and `Set("foo/bar2", "foo")`.
  // If the parent key is not a map, then return a KeyError.
  // For instance, can not set ("foo/bar", 4) after setting ("foo", 5).