在 golang 中与 []struct 交互

我有以下代码:


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/..."


如何为下面的代码赋值?


慕尼黑5688855
浏览 120回答 3
3回答

www说

PrivateLinkServiceConnections被定义为一个数组。您不能像访问对象那样访问它。要向其中添加项目,您需要使用append 函数。此外,您已将其定义为内联匿名结构,因此您的代码变得混乱。为 PrivateLinkServiceConnections 定义一个特定的类型,然后每次追加时,只需分配它而无需重新声明它。这是一种不好的做法。

蛊毒传说

最简单、最明智的方法是定义一个新类型: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)...

扬帆大鱼

起初我做了一个解决方法来添加我需要的“[]”并且它有效但它不是很好。但现在我终于明白了#模型文件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}谢谢您的帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go