Golang中初始化包含切片的结构体时遇到的问题

Golang中初始化包含切片的结构体时遇到的问题 我的JSON数据如下所示:

{
   "update":{
      "ticketStatusChange":{
         "statusChangeReason":2000,
         "ticketStatus":3,
         "ticketSubstatus":null,
         "additionalData":[
            {
               "key":"textWI",
               "value":"Info Operacion WI"
            },
            {
               "key":"closureProductCategoryTier1",
               "value":null
            },
            {
               "key":"closureProductCategoryTier2",
               "value":null
            },
            {
               "key":"closureProductCategoryTier3",
               "value":null
            },
            {
               "key":"resolutionCategory",
               "value":null
            },
            {
               "key":"resolutionCategoryTier2",
               "value":null
            },
            {
               "key":"resolutionCategoryTier3",
               "value":null
            },
            {
               "key":"resolution",
               "value":null
            },
            {
               "key":"outageDuration",
               "value":null
            },
            {
               "key":"requiredResolutionDateTime",
               "value":null
            },
            {
               "key":"problemRealDate",
               "value":null
            },
            {
               "key":"serviceOutageRealResolvedDate",
               "value":null
            },
            {
               "key":"cause",
               "value":null
            },
            {
               "key":"serviceCause",
               "value":null
            }
         ]
      }
   }
}

我的结构体定义如下:

type Tk struct {
	Update struct {
		TicketStatusChange struct {
			StatusChangeReason int         `json:"statusChangeReason"`
			TicketStatus       int         `json:"ticketStatus"`
			TicketSubstatus    interface{} `json:"ticketSubstatus"`
			AdditionalData     []struct {
				Key   string `json:"key"`
				Value string `json:"value"`
			} `json:"additionalData"`
		} `json:"ticketStatusChange"`
	} `json:"update"`
}

如何初始化包含键值和值值的AdditionalData。


更多关于Golang中初始化包含切片的结构体时遇到的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

如何使用键值和数值初始化 AdditionalData。

你可以使用结构体字面量的切片,如下所示:

example := TK{
	Update: struct{}{
		TicketStatusChange: struct{}{
			StatusChangeReason: 1,
			TicketStatus: 1,
			TicketSubstatus: 1,
			AdditionalData: []struct{}{
				struct{}{
					Key: "textWI",
					Value: "Info Operacion WI",		
				},
				struct{}{
					Key: "closureProductCategoryTier1",
					Value: nil,
				},
			},
		},
	},
}

Go Play Space

The Go Play Space

替代的 Go (Golang) Playground,具有语法高亮、海龟图形等功能

更多关于Golang中初始化包含切片的结构体时遇到的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,初始化包含切片的结构体时,可以直接在声明时使用复合字面量来赋值。对于你的结构体定义,AdditionalData 是一个切片,其中每个元素都是一个包含 KeyValue 字段的结构体。以下是初始化 Tk 结构体的示例代码:

package main

import "fmt"

type Tk struct {
	Update struct {
		TicketStatusChange struct {
			StatusChangeReason int         `json:"statusChangeReason"`
			TicketStatus       int         `json:"ticketStatus"`
			TicketSubstatus    interface{} `json:"ticketSubstatus"`
			AdditionalData     []struct {
				Key   string `json:"key"`
				Value string `json:"value"`
			} `json:"additionalData"`
		} `json:"ticketStatusChange"`
	} `json:"update"`
}

func main() {
	tk := Tk{
		Update: struct {
			TicketStatusChange struct {
				StatusChangeReason int         `json:"statusChangeReason"`
				TicketStatus       int         `json:"ticketStatus"`
				TicketSubstatus    interface{} `json:"ticketSubstatus"`
				AdditionalData     []struct {
					Key   string `json:"key"`
					Value string `json:"value"`
				} `json:"additionalData"`
			} `json:"ticketStatusChange"`
		}{
			TicketStatusChange: struct {
				StatusChangeReason int         `json:"statusChangeReason"`
				TicketStatus       int         `json:"ticketStatus"`
				TicketSubstatus    interface{} `json:"ticketSubstatus"`
				AdditionalData     []struct {
					Key   string `json:"key"`
					Value string `json:"value"`
				} `json:"additionalData"`
			}{
				StatusChangeReason: 2000,
				TicketStatus:       3,
				TicketSubstatus:    nil,
				AdditionalData: []struct {
					Key   string `json:"key"`
					Value string `json:"value"`
				}{
					{Key: "textWI", Value: "Info Operacion WI"},
					{Key: "closureProductCategoryTier1", Value: ""},
					{Key: "closureProductCategoryTier2", Value: ""},
					{Key: "closureProductCategoryTier3", Value: ""},
					{Key: "resolutionCategory", Value: ""},
					{Key: "resolutionCategoryTier2", Value: ""},
					{Key: "resolutionCategoryTier3", Value: ""},
					{Key: "resolution", Value: ""},
					{Key: "outageDuration", Value: ""},
					{Key: "requiredResolutionDateTime", Value: ""},
					{Key: "problemRealDate", Value: ""},
					{Key: "serviceOutageRealResolvedDate", Value: ""},
					{Key: "cause", Value: ""},
					{Key: "serviceCause", Value: ""},
				},
			},
		},
	}

	fmt.Printf("%+v\n", tk)
}

在这个示例中,AdditionalData 切片被初始化为包含多个元素的列表,每个元素通过 {Key: "key", Value: "value"} 的形式指定。对于 JSON 中的 null 值,在 Go 中可以使用空字符串 "" 表示(因为你的结构体将 Value 定义为 string 类型)。如果 Value 字段需要处理 null 或其他类型,可以考虑使用 interface{} 或指针类型(如 *string)来更好地映射 JSON 数据。

运行此代码将输出初始化后的结构体内容,确认 AdditionalData 已正确填充。

回到顶部