如何在结构内传递结构数组?

我正在结构内传递结构数组,在单元测试中,我使用了ServiceAccounts的dto和我的测试代码TestStoreServiceAccounts。如何在结构内传递结构数组?结构的嵌套是我无法理解的。


func TestStoreServiceAccounts(t *testing.T) {

StoreServiceAccounts = func(serviceAccounts []models.ServiceAccount) ([]string, error) {

    ServiceAccounts := []string{"service-account-details-inserted"}

    return ServiceAccounts, nil

}

Data := dto.ServiceAccountRequestDTO{

    ServiceAccounts : []{ //error on this line

        WorkspaceID:        1,

        ServiceAccountName: "sa-10",

        ServiceAccountKey: dto.ServiceAccountKey{

            Type:                    "service_account",

            ProjectID:               "abc",

            PrivateKeyID:            "123",

            PrivateKey:              "234",

            ClientEmail:             "read-clusters",

            ClientID:                "cdf",

            AuthURI:                 "https://accounts.google.com/o/oaut",

            TokenURI:                "https://oauth2.googleapis.com/token",

            AuthProviderX509CertURL: "https://www.googleapis.com",

            ClientX509CertURL:       "xwy",

        },

        CreatedAt: "2021-03-08 17:05:21.0",

        UpdatedAt: "2021-03-08 17:05:21.0",

        CreatedBy: "user-01",

        UpdatedBy: "user-01",

    },

}


responseData, err := clusterService.StoreServiceAccountsService(context.Background(), Data)

serviceAccountsdata := []string{"service-account-details-inserted"}


assert.Nil(t, err)

assert.NotNil(t, responseData)

assert.EqualValues(t, serviceAccountsdata, responseData)

}


开满天机
浏览 82回答 1
1回答

墨色风雨

在 DTO 结构外部定义您的 ServiceAccount 结构,以便您可以重用它。由于您正在定义结构内部的结构,因此在创建对象时还需要再次定义它,如下所示:ServiceAccountsServiceAccountRequestDTOData := dto.ServiceAccountRequestDTO{    ServiceAccounts : []struct{        WorkspaceID        int64             `json:"workspace_id"`        ServiceAccountName string            `json:"serviceAccountName"`        ServiceAccountKey  ServiceAccountKey `json:"serviceAccountKey"`        CreatedAt          string            `json:"created_at"`        UpdatedAt          string            `json:"updated_at"`        CreatedBy          string            `json:"created_by"`        UpdatedBy          string            `json:"updated_by"`    } `json:"serviceAccounts"`{ //start of slice (it's technically not an array) of objects        { // first object          WorkspaceID:        1,          ServiceAccountName: "sa-10",          ServiceAccountKey: dto.ServiceAccountKey{              Type:                    "service_account",              ProjectID:               "abc",              PrivateKeyID:            "123",              PrivateKey:              "234",              ClientEmail:             "read-clusters",              ClientID:                "cdf",              AuthURI:                 "https://accounts.google.com/o/oaut",              TokenURI:                "https://oauth2.googleapis.com/token",              AuthProviderX509CertURL: "https://www.googleapis.com",              ClientX509CertURL:       "xwy",          },          CreatedAt: "2021-03-08 17:05:21.0",          UpdatedAt: "2021-03-08 17:05:21.0",          CreatedBy: "user-01",          UpdatedBy: "user-01",        },        // .. more ServiceAccount objects ...    },}现在,这当然是令人难以置信的痛苦的编写和阅读,并复制了很多代码。因此,您应该在外部定义结构。type ServiceAccount struct{        WorkspaceID        int64             `json:"workspace_id"`        ServiceAccountName string            `json:"serviceAccountName"`        ServiceAccountKey  ServiceAccountKey `json:"serviceAccountKey"`        CreatedAt          string            `json:"created_at"`        UpdatedAt          string            `json:"updated_at"`        CreatedBy          string            `json:"created_by"`        UpdatedBy          string            `json:"updated_by"`    } `json:"serviceAccounts"`}type ServiceAccountRequestDTO struct {    ServiceAccounts []ServiceAccount}然后你可以像这样创建你的DTOData := dto.ServiceAccountRequestDTO{    ServiceAccounts : []ServiceAccount{ //start of slice of objects        ServiceAccount { // first object          WorkspaceID:        1,          ServiceAccountName: "sa-10",          ServiceAccountKey: dto.ServiceAccountKey{              Type:                    "service_account",              ProjectID:               "abc",              PrivateKeyID:            "123",              PrivateKey:              "234",              ClientEmail:             "read-clusters",              ClientID:                "cdf",              AuthURI:                 "https://accounts.google.com/o/oaut",              TokenURI:                "https://oauth2.googleapis.com/token",              AuthProviderX509CertURL: "https://www.googleapis.com",              ClientX509CertURL:       "xwy",          },          CreatedAt: "2021-03-08 17:05:21.0",          UpdatedAt: "2021-03-08 17:05:21.0",          CreatedBy: "user-01",          UpdatedBy: "user-01",        },        // .. more ServiceAccount objects ...    },}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go