为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
开满天机 2022-08-30 15:12:04
我正在结构内传递结构数组,在单元测试中,我使用了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)}
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

在 DTO 结构外部定义您的 ServiceAccount 结构,以便您可以重用它。


由于您正在定义结构内部的结构,因此在创建对象时还需要再次定义它,如下所示:ServiceAccountsServiceAccountRequestDTO


Data := 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

}


然后你可以像这样创建你的DTO


Data := 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 ...

    },

}


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信