JSON 인코딩
type Config struct { path string id string key string addr string size uint64 } var DefaultConfig = Config{"", "", "", "", 0}
type Config struct { path string id string key string addr string size uint64 } var DefaultConfig = Config{"", "", "", "", 0}동일한 구조의 필드를 병합하여 동일한 유형의 두 구조에서 필드를 병합하는 작업이 자주 발생합니다.
config struct {와 같은 기본 구성이있는 시나리오를 고려하십시오. 경로 문자열 ID 문자열 키 스트링 addr 문자열 크기 UINT64 } var defaultConfig = config { "", "", ",", ",", 0}
및 :
type Config struct { path string id string key string addr string size uint64 } var DefaultConfig = Config{"", "", "", "", 0}var fileconfig = config { ","file_id "," ","file_addr ", 0}
와 같은 파일에서로드 된 구성. 결과는 FileConfig가 DefaultConfig의 값을 덮어 쓰고 두 Structs의 값을 가지고 있습니다. 그러나 FileConfig는 모든 필드를 포함하지 않을 수 있습니다.
원래이 작업에 대한 반사를 활용하는 것을 숙고했습니다.
b : = recind.valueof (default) .elem ()
o : = recind.valueof (file) .elem ()
i : = 0; i import (
"인코딩/json"
"줄"
))
const filecontent =`{ "id": "file_id", "addr": "file_addr", "size": 100}`
FUNC UNMARSHALCONFIG (conf *config, content string) 오류 {
json.newdecoder (strings.newreader (content)). Decode (conf)
}
func mergeconfigs (defconfig *config, fileconfig *config) 오류 {
err : = unmarshalconfig (defconfig, filecontent); err! = nil {
반환 오류
}
for _, v : = Range FileConfig {
defconfig [v.key] = v. value
}
반환 nil
} 이 솔루션에서 FileConfig는 기본 구성에 해당되지 않습니다. 인코딩/JSON 패키지는 결 측값 (기본값이 제로 값으로 기본값) 및 기본값을 무시하는 파일 지정 값을 포함하여 필드 값의 모든 복잡성을 처리합니다. import (
"encoding/json"
"strings"
)
const fileContent = `{"id":"file_id","addr":"file_addr","size":100}`
func unmarshalConfig(conf *Config, content string) error {
return json.NewDecoder(strings.NewReader(content)).Decode(conf)
}
func mergeConfigs(defConfig *Config, fileConfig *Config) error {
if err := unmarshalConfig(defConfig, fileContent); err != nil {
return err
}
for _, v := range fileConfig {
defConfig[v.key] = v.value
}
return nil
}
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3