"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 동일한 유형의 GO 구조를 효율적으로 병합하는 방법은 무엇입니까? JSON 인코딩 방법

동일한 유형의 GO 구조를 효율적으로 병합하는 방법은 무엇입니까? JSON 인코딩 방법

2025-04-16에 게시되었습니다
검색:396

How Can I Efficiently Merge Go Structs of the Same Type Using JSON Encoding?

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 (
  "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
}

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 패키지는 결 측값 (기본값이 제로 값으로 기본값) 및 기본값을 무시하는 파일 지정 값을 포함하여 필드 값의 모든 복잡성을 처리합니다.

How Can I Efficiently Merge Go Structs of the Same Type Using JSON Encoding?

는 동일한 유형의 구조를 병합하여 단순하고 효율적인 솔루션을 달성하여 DEFAULT 가치보다 우선합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3