Как получить общую структуру из набора вложенных структур в Голанге - PullRequest
0 голосов
/ 09 октября 2018

В моем приложении мне нужно сделать два разных REST-запроса, содержащих JSON в качестве полезной нагрузки.Теперь для двух разных API базовый блок JSON содержит общую структуру, как показано ниже:

{
    "request": {
        "data": {
            "Object": [
                {
                    <Payload based on API>
                }
            ]
        }
    }
}

Для реализации этого я написал ниже код в двух разных пакетах

auth.go

package auth

type ReqJSONAuth struct {
    Request struct {
        Data struct {
            Object []Object `json:"Object"`
        } `json:"data"`
    } `json:"request"`
}


type Object struct {
    User User `json:"user"`
}

type User struct {
    CustomerID string  //`json:"customerid"`
    IPAddress string  `json:"pbxaddress"`
    NoOfUsers  string  //`json:"noofusers"`
}

func (j *ReqJSON) User() []User     { return j.Request.Data.Object.User } 
func (j *ReqJSON) SetUsers(u []User) { j.Request.Data.Object.User = u }
func main() {
    var j ReqJSON
    j.SetUser(User{
            UserID:    "_id",
            IPAddr:    "1.1.1.1",
            Noofusers: "100",
            Qos:       "34",
            ID:        "kldjflkdfjlkdjfkld",
            Domain:    "xyz.com",
    })

    b, err := json.MarshalIndent(j, "", "  ")
    fmt.Println(err, string(b))
}

metadata.go

package metadata

type ReqJSONMeta struct {
    Request struct {
        Data struct {
            Object []Object `json:"Object"`
        } `json:"data"`
    } `json:"request"`
}

type Object struct {
    Meta Meta `json:"metadata"`
}

type Meta struct {
    CustomerID            string `json:"customerId"`
    FilePath              string `json:"filePath"`
    FileName              string `json:"fileName"`
}
func (j *ReqJSONMeta) User() []User     { return j.Request.Data.Object.User } 
func (j *ReqJSONMeta) SetUsers(u []User) { j.Request.Data.Object.User = u }

Приведенный выше код работает, но я хочу реорганизовать его, чтобы сделать его более понятным и универсальным, чтобы в будущем можно было добавить больше API в текущую среду.Как я могу добиться того же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...