簡體   English   中英

如何在Go中為結構數組添加結構

[英]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。

在您的代碼中, MessagesMessage類型的一部分,您嘗試將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM