嗨,我有 json 資料,我將其解組到機器 slice 。現在,我希望將每個集群資訊、主機名從機器切片結構復制/附加到 Cluster Struct []Cluster 并嘗試在該結構中填充不同的值。
每個機器記錄都有一個關聯的 serviceName 。我在下面的所需輸出中尋找 out json 格式,其中 service_name 、required、vars、value 僅傳遞一次,即使它們在從機器切片傳遞時與每個 json 記錄相關聯。
當前代碼:
https://go.dev/play/p/6zVRiaLIgdN
期望的輸出:
{
"cluster_name": "dev",
"services": [
{
"service_name": "serviceA",
"required" : true,
"vars": {
"common_vars": {
"user": "custom-user",
"group": "custom-group"
}
},
"hosts": [
{
"host_name": "host1",
"vars": {
"common_vars" :{
"id": 1
}
}
},
{
"host_name": "host2",
"vars": {
"common_vars":{
"id": 2
}
}
}
]
},
{
"service_name": "serviceB",
"required" : false
.....
}
}
]
}
當前輸出:其中 ServiceName 與每個機器名稱重復,我希望它在切片中具有一次 service_name ,如上面的輸出
"cluster_name": "dev",
"services": [
{
"service_name": "serviceA",
"required": true,
"hosts": [
{
"host_name": "Machine-1",
"vars": {
"common_vars": {
"id": "1"
},
"custom_listeners": {}
}
}
],
"vars": {
"custom_listeners": {}
}
},
{
**"service_name": "serviceA"**,
"required": true,
"hosts": [
{
"host_name": "Machine-2",
"vars": {
"common_vars": {
"id": "2"
},
"custom_listeners": {}
}
}
],
"vars": {
"custom_listeners": {}
}
}
]
}
uj5u.com熱心網友回復:
您必須實作一些邏輯來合并具有相同名稱的服務記錄。
map[<ServiceName>]<Service>可用于避免每次迭代服務切片。
m := map[string]*Service{}
for i := range machines {
s, found := m[machines[i].Servicename]
if !found {
s = &Service{ServiceName: machines[i].Servicename, Required: true}
m[machines[i].Servicename] = s
}
s.Hosts = append(s.Hosts, Host{HostName: machines[i].Hostname, Vars: Var{CommonVars: map[string]interface{}{"id": machines[i].ID}}})
}
for _, s := range m {
cService.Services = append(cService.Services, *s)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439707.html
標籤:走
