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

在 golang 中与 []struct 交互

在 golang 中与 []struct 交互

Go
慕尼黑5688855 2022-10-24 15:33:28
我有以下代码:type AzStorageAccount struct {Type     string `json:"type"`Location string `json:"location"`Tags     struct {} `json:"tags"`Properties struct {    PrivateLinkServiceConnections []struct {        Name       string `json:"name"`        Properties struct {            PrivateLinkServiceID              string `json:"privateLinkServiceId"`            GroupIds                          string `json:"groupIds"`            PrivateLinkServiceConnectionState struct {                Status          string `json:"status"`                Description     string `json:"description"`                ActionsRequired string `json:"actionsRequired"`            } `json:"privateLinkServiceConnectionState"`        } `json:"properties"`    } `json:"privateLinkServiceConnections"`    ManualPrivateLinkServiceConnections []interface{} `json:"manualPrivateLinkServiceConnections"`    Subnet                              struct {        ID string `json:"id"`    } `json:"subnet"`    CustomDNSConfigs []interface{} `json:"customDnsConfigs"`} `json:"properties"`}但是我在将值分配给 PrivateLinkServiceConnections []struct {} 中的变量时遇到问题起初我正在使用,但由于我需要使用 []struct 它不再起作用。storageAccount.Location = "eastus2"    storageAccount.Type = "Microsoft.Network/privateEndpoints"    storageAccount.Properties.PrivateLinkServiceConnections.Properties.PrivateLinkServiceId = "/subscriptions"    storageAccount.Properties.PrivateLinkServiceConnections.Name = "priv-endpoint"    storageAccount.Properties.PrivateLinkServiceConnections.Properties.GroupIds = "postgresqlServer"    storageAccount.Properties.PrivateLinkServiceConnections.Properties.PrivateLinkServiceConnectionState.Status = "Approved"    storageAccount.Properties.PrivateLinkServiceConnections.Properties.PrivateLinkServiceConnectionState.Description = "Auto-approved"    storageAccount.Properties.PrivateLinkServiceConnections.Properties.PrivateLinkServiceConnectionState.ActionsRequired = "None"    storageAccount.Properties.Subnet.Id = "/subscriptions/..."如何为下面的代码赋值?
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

PrivateLinkServiceConnections被定义为一个数组。您不能像访问对象那样访问它。要向其中添加项目,您需要使用append 函数。

此外,您已将其定义为内联匿名结构,因此您的代码变得混乱。为 PrivateLinkServiceConnections 定义一个特定的类型,然后每次追加时,只需分配它而无需重新声明它。这是一种不好的做法。


查看完整回答
反对 回复 2022-10-24
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

最简单、最明智的方法是定义一个新类型:


type PrivateLinkServiceConnections struct {

        Name       string `json:"name"`

       ...   

}


Properties struct {

    Connections []PrivateLinkServiceConnections  `json:"privateLinkServiceConnections"`

    ...

否则,您必须在每次初始化实例时明确指定每个结构的结构,例如:


x:=struct {

        Name       string `json:"name"`

        Properties struct {

            PrivateLinkServiceID              string `json:"privateLinkServiceId"`

            GroupIds                          string `json:"groupIds"`

            PrivateLinkServiceConnectionState struct {

                Status          string `json:"status"`

                Description     string `json:"description"`

                ActionsRequired string `json:"actionsRequired"`

            } `json:"privateLinkServiceConnectionState"`

        } `json:"properties"`

    }{ 

     Name:"name",

     Properties:struct {

            PrivateLinkServiceID              string `json:"privateLinkServiceId"`

            GroupIds                          string `json:"groupIds"`

            PrivateLinkServiceConnectionState struct {

                Status          string `json:"status"`

                Description     string `json:"description"`

                ActionsRequired string `json:"actionsRequired"`

            } `json:"privateLinkServiceConnectionState"`

        } { 

       PrivateLinkServiceID: id,

     },

 }


storageAccount.PrivateLinkServiceconnections=append(storageAccount.PrivateLinkServiceConnections, x)

...


查看完整回答
反对 回复 2022-10-24
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

起初我做了一个解决方法来添加我需要的“[]”并且它有效但它不是很好。


但现在我终于明白了


#模型文件


type AccessPolicieS struct {

TenantID string `json:"tenantId"`

ObjectID string `json:"objectId"`

Permissions struct {

    Keys         []string `json:"keys"`

    Secrets      []string `json:"secrets"`

    Certificates []string `json:"certificates"`

    } `json:"permissions"`

}


    type AzVaultPriv struct {

    Properties struct {

        AccessPolicies []AccessPolicieS

    } `json:"properties"`

}



acessP := models.AccessPolicieS{}

    acessP.TenantID  = "*******"

    acessP.Permissions.Keys = append(acessP.Permissions.Keys, "UnwrapKey")

    acessP.Permissions.Keys = append(acessP.Permissions.Keys, "WrapKey")

    acessP.Permissions.Keys = append(acessP.Permissions.Keys, "Get")

    acessP.Permissions.Secrets = append(acessP.Permissions.Secrets, "get")

    acessP.Permissions.Certificates = 

    append(acessP.Permissions.Certificates, "get")


    newModel := models.AzVaultPriv {}

    newModel.Properties.AccessPolicies = append(newModel.Properties.AccessPolicies, acessP)

    marshaledObject, _ := json.Marshal(newModel)

按照下面的一个不理想的解决方法,但让我继续前进,直到我解决了这个问题。


func FormatJsonStructVaultPriv(json []byte) []byte {

    json = bytes.Replace(json, []byte("Policies\":{"), []byte("Policies\":[{"), 1)

    json = bytes.Replace(json, []byte("get\"]}}}}"), []byte("get\"]}}]}}"), 1)

    return json

}

谢谢您的帮助!


查看完整回答
反对 回复 2022-10-24
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号