Создание сложной структуры - PullRequest
0 голосов
/ 11 марта 2020

Я создал структуру в файле с именем Availability. go

package restconsume

import (

)

// Availabilityrequest for sabre
type Availabilityrequest struct {
     OTAAirLowFareSearchRQ struct {
         OriginDestinationInformation []struct {
            DepartureDateTime   string `json:"DepartureDateTime"`
            DestinationLocation struct {
                LocationCode string `json:"LocationCode"`
            } `json:"DestinationLocation"`
            OriginLocation struct {
                LocationCode string `json:"LocationCode"`
            } `json:"OriginLocation"`
            RPH string `json:"RPH"`
        } `json:"OriginDestinationInformation"`
        POS struct {
            Source []struct {
                PseudoCityCode string `json:"PseudoCityCode" default:"F9CE"`
                RequestorID    struct {
                    CompanyName struct {
                        Code string `json:"Code" default:"TN"`
                    } `json:"CompanyName"`
                    ID   string `json:"ID" default:"1"`
                    Type string `json:"Type" default:"1"`
                } `json:"RequestorID"`
            } `json:"Source"`
        } `json:"POS"`
        TPAExtensions struct {
            IntelliSellTransaction struct {
                RequestType struct {
                    Name string `json:"Name" default:"200ITINS"`
                } `json:"RequestType"`
            } `json:"IntelliSellTransaction"`
        } `json:"TPA_Extensions"`
        TravelPreferences struct {
            TPAExtensions struct {
                DataSources struct {
                    ATPCO string `json:"ATPCO" default:"Enable"`
                    LCC   string `json:"LCC" default:"Disable"`
                    NDC   string `json:"NDC" default:"Disable"`
                } `json:"DataSources"`
                NumTrips struct {
                } `json:"NumTrips"`
            } `json:"TPA_Extensions"`
        } `json:"TravelPreferences"`
        TravelerInfoSummary struct {
            AirTravelerAvail []struct {
                PassengerTypeQuantity []struct {
                    Code     string `json:"Code"`
                    Quantity int    `json:"Quantity"`
                } `json:"PassengerTypeQuantity"`
            } `json:"AirTravelerAvail"`
            SeatsRequested []int `json:"SeatsRequested" default:"1"`
        } `json:"TravelerInfoSummary"`
        Version string `json:"Version" default:"1"`
    } `json:"OTA_AirLowFareSearchRQ"`
}

// AddADepartureDate to set the date you leave
func (a *Availabilityrequest) AddADepartureDate() Availabilityrequest {
a.OTAAirLowFareSearchRQ.OriginDestinationInformation[0].DepartureDateTime = "2020-03-21"
    return *a
}
//AddOriginDestination to set the ori and dest
func (a *Availabilityrequest) AddOriginDestination(Origin ,Destination string)  {
a.OTAAirLowFareSearchRQ.OriginDestinationInformation[0].DestinationLocation.LocationCode = Destination
    a.OTAAirLowFareSearchRQ.OriginDestinationInformation[0].OriginLocation.LocationCode = Origin
}

Теперь я импортировал этот пакет в свой основной, и у меня возникла проблема с созданием только одной подструктуры (TPAExtensions) main. go

package main

import (
    "restconsume"
    "fmt"
)

func main() {
var a= new(restconsume.Availabilityrequest)
    a = Availabilityrequest{
          "OTA_AirLowFareSearchRQ":OTAAirLowFareSearchRQ{
        "IntelliSellTransaction": IntelliSellTransaction{
            "RequestType": RequestType{
              "Name": "200ITINS"},
          },
        },
    }
}

сообщение об ошибке undefined: Availabilityrequest Мой вопрос: как я могу создать экземпляр такого рода сложной структуры?

1 Ответ

1 голос
/ 11 марта 2020

Самый простой ответ - не пытаться использовать struct literal, а вместо этого иметь переменную типа верхнего уровня, которая должна быть инициализирована подходящим нулевым значением для его типа, а затем явно устанавливать только те поля, которые необходимы, например, так:

var a Availabilityrequest
a.OTAAirLowFareSearchRQ.TPAExtensions.IntelliSellTransaction.RequestType.Name = "200ITINS"

Но, честно говоря, судя по вашему вопросу, похоже, что вы JavaScript программист, пытающийся атаковать Go без особых предварительных знаний об этом языке. Это путь к страданию.
Пожалуйста, посоветуйте хотя бы начать с Тур Go, а затем прочитать любую книгу начального уровня на Go (I рекомендую этот ).

«Эффективный Go» также является обязательным.

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