[英]How to add a struct to an array of structs in Go
在golang中,我正在嘗試制作一組消息,並能夠輕松地向數組添加新的“對象”。
type Message struct {
Name string
Content string
}
var Messages = []Message{
{
Name: "Alice",
Content: "Hello Universe",
},{
Name: "Bob",
Content: "Hello World",
},
}
func addMessage(m string) {
var msg = new(Message)
msg.Name = "Carol"
msg.Content = m
Messages = append(Messages, msg)
}
構建時我收到一條錯誤消息:
不能使用msg(類型*消息)作為附加類型的消息
為什么append()
不起作用(正如我對JavaScript的array.concat()
期望的array.concat()
),或者new()
不起作用?
關於如何改進此代碼的任何其他提示都是受歡迎的,因為我顯然是Go的新手。
改變這3行
var msg = new(Message)
msg.Name = "Carol"
msg.Content = m
至
msg := Message{
Name: "Carol",
Content: m,
}
一切都應該有效。 new
創建一個指向Message
的指針。 您的切片不是Message指針的一部分,而是一片Message。
在您的代碼中, Messages
是Message
類型的一部分,您嘗試將Message
類型( *Message
)的指針附加到它。
您可以通過執行以下操作來修復程序:
func addMessage(m string) {
var msg = new(Message) // return a pointer to msg (type *msg)
msg.Name = "Carol"
msg.Content = m
Messages = append(Messages, *msg) // use the value pointed by mgs
}
或者,您可以將Messages
聲明為*Message
的片段:
var Messages = []*Message{
&Message{ // Now each entry must be an address to a Message struct
Name: "Alice",
Content: "Hello Universe",
},
&Message{
Name: "Bob",
Content: "Hello World",
},
}
在上面的例子中, addMessage
不需要任何更改。 但是你必須在其他地方修改Messages
訪問權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.